我正在寻求实现一种算法,该算法随机选择列表中的项目,尽管是有偏见的。假设我为该列表中的每个元素设置了值 priority 。我希望在选择中更频繁地出现具有更高优先级的元素。
另一件事是这些元素的优先级会发生变化。如果有人特别挑选一个元素而不是让该元素来自随机选择,那么该元素的优先级应该增加一定的因子。
我担心我不太确定如何用数学方式表达我的问题。另外,我不知道从哪里开始。我发现了一篇文章here,它涉及第一部分,但没有涉及动态增加元素的优先级。
我想到的一种方法是,元素的优先级越高,我们制作的副本就越多。但是,这在计算机代码中实现是非常不可行的
我也在math.stackexchange上发布了这个问题,希望能有一些数学见解。
注意:为了清楚起见,我不是在寻找任何排序的实现。我只是在寻找一个明确的方向/一些见解,所以我可以继续编写我自己的算法。
答案 0 :(得分:2)
我现在想到的一种可能的方法是,
假设有两个数组,priority [k]和values [k]
priority[]={2,1,5,7}
values[]={"apple","banana","oranges","lollipop"}
以偏见的方式获得随机值:
1.让优先级数组的和为S.在这个例子中,S = 15
2.有一个累积的优先级数组,
`cumulative[]= {2,3,8,15}
3。现在生成随机数r< = S.假设它是7
4. 7是< 8,累积数组中的第三个元素。所以你返回“橙色”
如果r = 3,则返回“banana”,如果r = 10,则返回“lollipop”。
如果有人特别选择一个元素,只需将该元素的优先级值增加一个因子k。
假设k = 2,有人选择橙子,新数组
priority[]={2,1,7,7}
values[]={"apple","banana","oranges","lollipop"}
cumulative={2,3,10,17}
使用与上述相同的算法,您将获得所需的结果。