Big-O时间复杂度,嵌套for和while循环

时间:2014-09-29 20:09:51

标签: algorithm big-o

我正在努力理解Big-O时间的复杂性,不幸的是我在努力,我似乎​​无法掌握这个概念,我知道我的结果对于以下两个代码片段是正确的,但是我如何到达那里似乎是错误的。有人能够帮助解释我误解的地方(不是请,但不要使用sigma。谢谢!

Code Fragment               Time Complexity
sum ← 0                     O(1)
  for i ← 1 to n do         O(n)
    for j ← 1 to n do       O(n)
      k←1                   O(1)
      while k < n do        
        k ← k * C           O(log n)  - affected by C (due to multiplication)
        sum ← sum + 1       O(1)
                            -----------
                            O(1 x n x n x 1 x [log n] x 1)
                            O(n2 log n)

Code Fragment             Time Complexity
sum ← 0                   O(1)
 for i ← 1 to n do        O(n)
  for j ← 1 to i do       O(n) 
    k←1                   O(1)
    while k < n do      
      k ← k + C           O(n) – not affected by C, k is arbitrarily large
      sum ← sum + 1       O(1)
                            -----------
                          O(1 x n x n x 1 x n x 1)
                          O(n^3)

1 个答案:

答案 0 :(得分:3)

虽然最终结果是正确的,但我在计算中看到了一些小错误。

在第一个算法中:

O(1 x n x n x 1 x [log n] x 1)

应该是

1 + n x n x (1 + (O(log n) x 2)) = O(n^2 * log n)

在第二种算法中:

O(1 x n x n x 1 x n x 1)

应该是

1 + n x O(n) x (1 + (O(n) x 2)) = O(n^3)