使用Zipf的分布曲线加权随机

时间:2015-11-03 03:30:47

标签: javascript distribution

我正在构建一个JavaScript函数,它返回随机元素但基于Zipf的分布曲线:
https://en.wikipedia.org/wiki/Zipf%27s_law

我看了一眼:
http://codetheory.in/weighted-biased-random-number-generation-with-javascript-based-on-probability/

它有点接近,但我想使用一种基于Zipf分布曲线的数学公式更简单的方法。

考虑:

['kiwi', 'banana', 'orange', 'apple', 'pear', 'mango', .... etc]

所以基本上如果我们从上面的数组中选择10,000个随机水果,我们就会得到这个分布:

enter image description here

第一个点是猕猴桃,第二个点是橙色,等等。

1 个答案:

答案 0 :(得分:1)

似乎你想用s = 1来实现最简单的Zipf定律。这意味着您可以简单地使用n数组的长度来获取谐波系列的元素,并将数组的第一个元素的权重设置为11/2的下一个,在1/3旁边,依此类推,直至达到1/n

然后你可以使用代码理论中的代码并插入你的元素权重数组(作为键值对象,就像它们在那里那样),而不是random_check中的数组,你就完成了。