Ock*_*zor 5 java random algorithm
我知道Java使用线性同余生成器.我的问题是 - 生成随机数的复杂性是多少?你如何进行这样的分析?
所述生成的复杂一个随机数为O(1).你的意思是"它在运行时和内存方面的成本是多少"?
您可以使用微基准测量它们,例如junit-benchmark或Brent Boyer的Benchmark(在Java中测量单线程复杂算法的最佳宏基准测试工具/框架中,查看此类工具的大量列表?).
此外,我认为Javas随机数生成器非常快,但统计上不好.而是使用外部库,例如http://www.cs.gmu.edu/~sean/research/上的Mersenne Twister ,或者,如果运行时对您来说非常重要,请使用Fast Mersenne Twister.
随机数发生器的时间复杂度为O(1).随着您拥有更多随机数,所需时间不会增加.
java.util.Random的随机性可能是个问题.它使用2 ^ 48的种子,因此它会在这么多值之后重复.这意味着nextLong()不会生成所有可能的值.
如果这是一个问题,你可以使用SecureRandom,它比较慢,但它重复的点要高得多.