我正在寻找构造一个返回随机元素但基于Zipf分布曲线的JavaScript函数:
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个随机水果,我们将得到以下分布:
第一个点是奇异果,第二个点是橙色,依此类推。
最佳答案
似乎您想用s = 1实现最简单的Zipf定律。这意味着您可以简单地以数组长度n
提取谐波序列的元素,并将数组的第一个元素的权重设置为1
,紧挨着1/2
,紧挨着1/3
依此类推,直到达到1/n
。
然后,您可以只使用codetheory中的代码,然后将您的element-weight-array(作为键值对象,就像他们在此处所做的那样)插入而不是在random_check
中插入它们的数组,就可以了。