确定" for"的大O复杂性循环。

时间:2015-05-16 16:43:01

标签: big-o time-complexity

我有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)?

感谢。

2 个答案:

答案 0 :(得分:1)

对于第一个,A:

您需要查看内部循环总共总共的迭代次数。那么内循环有多少次迭代?首先是1,然后是2,然后是3,直到N ^ 2。 所以我们得到:

Big-O notation formula A

对于下一个,B:

再次,我们看一下内部循环的迭代次数:

每次运行相同的迭代次数,n次。每次迭代n的三分之一。所以我们得到:

Big-O notation formula B

对于最后一个,C

同样,内部循环计数:

它自己迭代log2n。但它确实做了n次。所以我们得到:

Big-O notation formula C

我希望这会有所帮助,如果有什么不清楚的地方让我知道:

为了进一步了解该主题,我建议this site

答案 1 :(得分:0)

关于A,它是O(n ^ 3),它是O(n ^ 4)

的下限
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)更低。

读取此帖时,B和C的其他答案都是正确的。