Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 动态有偏随机选择算法_Algorithm_Random_Selection - Fatal编程技术网

Algorithm 动态有偏随机选择算法

Algorithm 动态有偏随机选择算法,algorithm,random,selection,Algorithm,Random,Selection,我希望实现一种算法,从列表中随机挑选项目,尽管是以有偏见的方式。假设列表中的每个元素都有一个值优先级。我希望具有更高优先级的元素更频繁地出现在选择中 另一件事是,这些元素的优先级将会改变。如果有人特别挑选某个元素,而不是让该元素来自随机选择,则该元素的优先级应增加某个因素 恐怕我不太清楚如何用数学的方法来表达我的问题。而且,我也不知道从哪里开始。我发现一篇文章涉及第一部分,但没有涉及动态增加元素优先级 我想到的一种方法是,元素的优先级越高,我们对它的复制就越多。然而,在计算机代码中实现这一点是非

我希望实现一种算法,从列表中随机挑选项目,尽管是以有偏见的方式。假设列表中的每个元素都有一个值优先级。我希望具有更高优先级的元素更频繁地出现在选择中

另一件事是,这些元素的优先级将会改变。如果有人特别挑选某个元素,而不是让该元素来自随机选择,则该元素的优先级应增加某个因素

恐怕我不太清楚如何用数学的方法来表达我的问题。而且,我也不知道从哪里开始。我发现一篇文章涉及第一部分,但没有涉及动态增加元素优先级

我想到的一种方法是,元素的优先级越高,我们对它的复制就越多。然而,在计算机代码中实现这一点是非常不可行的

我也在math.stackexchange上发布了这个问题,希望获得一些数学方面的见解


注意:我只是想说清楚,我不希望有任何类似的实现。我只是在寻找一个明确的方向/一些见解,以便我可以继续编写自己的算法。

我现在可以想到的一个可能的方法是

假设有两个数组,优先级[k]和值[k]

priority[]={2,1,5,7}
values[]={"apple","banana","oranges","lollipop"}
要以有偏差的方式获取随机值:
1.让优先级数组的和为S。在本例中,S=15。
2.具有优先级数组的累积数组,

`cumulative[]= {2,3,8,15}

三,。现在生成一个随机数r作为一个轻微的加速,在生成随机数r之后,您可以使用二进制搜索找到相应的数组位置(因为部分和的列表不会减少)。
priority[]={2,1,7,7}
values[]={"apple","banana","oranges","lollipop"}
cumulative={2,3,10,17}