我有一个项目列表。当我创建列表时,每个项目都有相同的机会被选中。但是当一个项目被选中时,它的机会下降而其他的机会上升。如果在这个过程中添加了一个新项目,它应该有最高的机会被选中,它的机会随着它被选中而下降。我正在寻找一个可以完成这个的好算法是C#。概括的想法:我有5个项目,随着时间的推移,所有5个项目将被选中20%的时间。我试图让选择尽可能接近20%,减少离群值。如果存在,将更多/更少地选择它以使其重新排列。 最佳答案 使用桶加权队列:不使用列表,而是将您的集合分成桶-每个桶都有相关的检索频率。项目在被选中时从较高频率的桶移动到较低