【问题标题】:Is there any method which generate random numbers with complexity O(1)是否有任何方法可以生成复杂度为 O(1) 的随机数
【发布时间】:2016-11-01 07:44:51
【问题描述】:

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

【问题讨论】:

  • 作为背景,你能描述一下这些随机数的应用吗?
  • 在这种情况下,O(n) 是什么意思? n 是位数吗?
  • @FrankPuffer yes 是文件的字节数
  • @ENIOMARKU:但是很明显,这永远不会比 O(n) 更快。

标签: java random complexity-theory


【解决方案1】:

任何 RNG 或 PRNG 都将是 O(N) 或更糟1 以生成 N 个随机位 / 字节 / 任何东西。 (复制N个字节/位是O(N)操作...)

我认为您真正要问的是,是否有任何 RNG 或 PRNG 可以快速生成数字和/或快速播种。请参阅此问答:


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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 2022-01-09
      • 2021-03-28
      • 2020-08-18
      • 2019-06-26
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多