有没有任何方法可以生成复杂度为O(1)的随机数

时间:2016-06-29 14:15:35

标签: java random complexity-theory

我正在寻找一种使用java生成随机数的方法。我希望它快速且高度安全。不幸的是,java中的SecureRandom类及其方法nextBytes()生成高度安全的随机数,但这种方法花了我很多时间。我正在寻找是否存在与上述具有相同目标的方法的任何实现,其具有复杂度O(1)或最坏情况O(n)。

2 个答案:

答案 0 :(得分:4)

任何RNG或PRNG将为boost::optional<>或更差 1 以生成N个随机位/字节/无论如何。 (复制N个字节/位是O(N)操作...)

我认为您真正要问的是,是否有任何RNG或PRNG快速生成数字和/或快速播种。看到这个Q&amp;答:

1 - 实际上,典型的加密质量PRNG是O(N)。例如,Oracle的O(N)默认使用SHA1,而SHA1是SecureRandom算法,用于散列O(M)字节消息。这会在生成M字节时导致O(N) PRNG。当然,SHA-1的比例常数相当大......但这与算法的大O复杂度类无关。

答案 1 :(得分:0)

您可以使用Apache commons-math3生成随机数。 它有很多有用的方法。 请参阅“RandomGenerator”接口及其实现类。