我有3个问题我无法确定Big O复杂性。
一个。
int x = 0;
for ( int y = 1; y <= n * n; y++)
for ( int z = 1; z < y; z++ )
x++;
我想说n 3 ,因为第一个循环是n 2 ,内部是n。
B中。
int x = 0;
for ( int y = 1; y <= n; y++)
for ( int z = i; z <= n; z += 3)
x++;
我想说Big O(n)因为外部循环是N而内部我认为是Big O(3)。
℃。
for ( int x = 1; x <= n; x++)
for ( int y = n; y > 0; y /= 2)
这个让我很困惑。我认为内部循环是Logn,因为每次运行时它除以2。外面看起来只是b n,那么这将是Big O(nlogn)还是Big O(logn)?
感谢。
答案 0 :(得分:1)
对于第一个,A:
您需要查看内部循环总共总共的迭代次数。那么内循环有多少次迭代?首先是1,然后是2,然后是3,直到N ^ 2。 所以我们得到:
对于下一个,B:
再次,我们看一下内部循环的迭代次数:
每次运行相同的迭代次数,n次。每次迭代n的三分之一。所以我们得到:
对于最后一个,C
同样,内部循环计数:
它自己迭代。但它确实做了n次。所以我们得到:
我希望这会有所帮助,如果有什么不清楚的地方让我知道:
为了进一步了解该主题,我建议this site。
答案 1 :(得分:0)
int x = 0;
for ( int y = 1; y <= n * n; y++)
for ( int z = 1; z < y; z++ )
x++;
循环为z。 z只会转到y的当前值
y=1
z: no loop
y=2
z: 1
y=3
z: 1 2
y=4
z: 1 2 3
...
y=15
z: 1 2 3 4 5 6 7 8 9 10 11 12 13 14
因此,对于从1到25(= n ^ 2)的n的每一步,内循环都有y-1步。
所以,我会说它是T(N) = N^2 * (1 + 2 + 3 + 4 + ... + (N-1))
,它是O(n ^ 3),它比另一个答案中提到的O(n ^ 4)更低。