Java 给定代码片段的大O表示法
我正在寻找一些关于大O符号的帮助。目标是给出给定代码片段的增长顺序Java 给定代码片段的大O表示法,java,time-complexity,big-o,Java,Time Complexity,Big O,我正在寻找一些关于大O符号的帮助。目标是给出给定代码片段的增长顺序 int sum = 0 for (int k = n; k > 0; k/=2 ) for (int i = 0; i < k; i++) sum++; int和=0 对于(int k=n;k>0;k/=2) for(int i=0;i
int sum = 0
for (int k = n; k > 0; k/=2 )
for (int i = 0; i < k; i++)
sum++;
int和=0
对于(int k=n;k>0;k/=2)
for(int i=0;i
对于这个代码片段,我得到了(N logN)。第一个for循环是logN,第二个for循环是N
int sum = 0
for (int i = 1; i < n; i *= 2 )
for (int j = 0; j < i; j++)
sum++;
int和=0
对于(int i=1;i
我在这件事上遇到了一些麻烦。第一个for循环是logN,但是第二个for循环是我被卡住的地方。中的第二个for循环依赖于第一个for循环。我不知道如何用大N表示法来表示
int sum = 0
for (int i = 1; i < n; i *= 2 )
for (int j = 0; j < n; j++)
sum++;
int和=0
对于(int i=1;i
第一个for循环是logN。第二个for循环是N,那么这是(N)
我正在努力解决这个问题,希望能得到一些帮助。多谢各位
j
循环到i
,它可以高达n-1
,因此循环的j
本身就是O(n)。但让我们看看会发生什么
- n=16
- i=1内部循环运行1次
- i=2内部循环运行2次
- i=4内部循环运行4次
- i=8内部循环运行8次
- n=17
- i=1内部循环运行1次
- i=2内部循环运行2次
- i=4内部循环运行4次
- i=8内部循环运行8次
- i=16内部循环运行16次
1 + 2 + 4 + ... + 2^x = 2^(x+1) - 1
其中x是n
之前的2的幂。这个2^(x+1)
可能高达2n,因此总体复杂度为O(n),去掉了常量“2”
j
一直到n
。这里的复杂性是O(n*logn)最后一个示例仍然是N*logN。您必须执行N次操作log N次,因此,您得到N*log N。第二次内部运行不是每次都运行到
i-1
,从而使其成为N(N+1)/2
?对不起,由于外部原因,不是n
;这必须根据日志进行调整。@Chieftwoils这是不正确的,但我最初对第二个片段的分析也是不正确的。我现在已经改正了。