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的随机数生成器非常快,但在统计上不好)很抱歉,我完全误解了这个问题。现在删除评论我接受了第一个答案,因为它似乎是正确的。你的答案大致相同。