我有double数组和欲被选择为反比于它的值以选择从它的值与每个值的概率。 例如:
arr[0] = 100
arr[1] = 200
在这个例子中,元素0将有被选择和元件1 33%的几率的66%。 我有困难的编码本。 什么是迄今为止我所做的是计算阵列(例子中是300)的总价值,然后我打得四处计算它们的总数的百分比前反演的数字。 我不能得到任何工作。 最后,我的愿望:
new randomNumber
for(int y=0; y < probabilities.length; y++){
if(randomNumber < probabilities[y]){
Select probabilities[y]
}
}
或东西的影响。 任何帮助吗? 编码是Java,但我可以适应任何伪代码。
通常的技术是将阵列转化为累加和的数组:
[10 60 5 25] --> [10 70 75 100]
选择一个随机数在从零到的累计总数的范围内(在本例中: 0 <= x < 100
)。 然后,使用二分法累积阵列上的索引定位成原始数组:
Random variable x Index in the Cumulative Array Value in Original Array
----------------- ----------------------------- ----------------------
0 <= x < 10 0 10
10 <= x < 70 1 60
70 <= x < 75 2 5
75 <= x < 100 3 25
例如,如果随机变量x是4,二等分的累积阵列给出了其对应于10原始数组中的0的位置索引。
并且,如果随机变量x是72,二等分的累积阵列给出了其对应于5原始数组中的2的位置索引。
对于成反比,除了在执行所述阵列的初始转换成其倒数,然后生成的累积和阵列的技术中是完全一样的:
[10 60 5 25] --> [1/10 1/60 1/5 1/25] --> [1/10 7/60 19/60 107/300]