我有一个序列 S =(s1,s2,... sk),每个序列位点的概率权重 P =(p1,p2,... pk),其中 P = 1 的最大长度 S 的总和可能约为 10 ^ 9 通过仿真,每次抽奖后都会选择并修改一个站点k,因为pk每次运行都会改变。每次模拟的预期站点交换次数约为 5万-10万
问题1:您如何建议绘制网站? 实际上,我实现了这种逻辑,就像在文献see e.g. here中一样,这种逻辑本身似乎还可以:
counter = 0
random_number = draw_random() #<= float in range 0,1
while P_sum < random_number
P_sum += P[counter]
counter++
return counter
通过测试模拟,我观察到一个强烈的偏差似乎重建了随机发生器分布(see_here)三个不同的发生器会产生3个不同的结果……这还可以,但是在所有状态下都不正确 Walkers和Knuth使用查找表的方法对我来说似乎太昂贵了,因为每次都必须重新计算查找表。
问题2 如何减少随机性带来的偏见?实际内置了3种不同的生成器(每次仿真仅使用一种生成器),它们根据机会均匀分布。不知道一行模拟代码时,知道这是一个沉重的问题
问题3 东西库? 因为不需要太多代码,所以我自己编写就没有问题,但是有没有针对它的另一个库?问这个question可能已经过时了...不是Boost,因为我不想建立第四个随机生成器并使用大的东西
问题4 更快的替代方法?
我知道这个主题可能在几千年前就得到了回答-但没有一个答案能使我满意,也没有给我一个明智的选择。 here似乎有相同的问题,但我不知道是在哪个堆中构建的,为什么对这种“简单”的事情而言,它看起来非常复杂
感谢您的支持!