java.util.Random.next(n)的O(n)是什么

java.util.Random.next(n)的O(n)是什么,java,time-complexity,Java,Time Complexity,我想知道java.util.Random.next(n)是与n成线性比例还是一个常数?有人能帮我解决这个问题,或者告诉我如何确定复杂性吗?如果仍然相关,则运行时是O(1) 173: protected synchronized int next(int bits) 174: { 175: seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1); 176: return (int) (seed

我想知道
java.util.Random.next(n)
是与n成线性比例还是一个常数?有人能帮我解决这个问题,或者告诉我如何确定复杂性吗?

如果仍然相关,则运行时是
O(1)

 173:   protected synchronized int next(int bits)
 174:   {
 175:     seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
 176:     return (int) (seed >>> (48 - bits));
 177:   }
173:受保护的同步整数下一步(整数位)
174:   {
175:seed=(seed*0x5deec66dl+0xBL)和((1L>>(48位));
177:   }
我相信这是由于甲骨文对它们如何生成随机数的解释

此类的实例用于生成伪随机流 该类使用48位种子,该种子使用 线性同余公式。(见唐纳德·克努特,《计算机艺术》 编程,第2卷,第3.2.1节。)


next
的Javadoc解释

方法
next
由类Random通过原子地将种子更新为

(seed*0x5deec66dl+0xBL)和((1L>>(48位))

显然,这些表达式中没有O(n)复杂性的痕迹。

来自文档:

Random.nextInt(n)使用Random.next()的次数平均不到两次-它 使用一次,如果获得的值高于最高倍数 如果n小于MAX_INT,则重试,否则返回值 模n(这可防止数值高于n的最高倍数 低于MAX_INT(扭曲分布),因此返回一个 在0到n-1范围内均匀分布

根据文档,
java.util.Random.next
实现如下

synchronized protected int next(int bits) {
   seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
   return (int)(seed >>> (48 - bits));
 }
synchronized protected int next(整数位){
seed=(seed*0x5deec66dl+0xBL)和((1L>>(48位));
}
所以复杂性是O(1)

旁注:-


您可以使用现有的多个工具通过微基准测试来测量复杂性。您可以在上面找到一个列表。但是,如果运行时复杂性对您很重要,您可以使用。(这是一个外部库,用于测量运行时复杂性,因为Java的随机数生成器非常快,但在统计上不好)

很抱歉,我完全误解了这个问题。现在删除评论我接受了第一个答案,因为它似乎是正确的。你的答案大致相同。