双循环的最坏情况运行时

时间:2015-08-05 16:24:34

标签: algorithm runtime

有人可以在下面的练习中解释最坏情况下的运行时间是O(N)而不是O(N ^ 2)。循环有两个,对于每个我需要将j与i进行比较,求和,然后递增并再次重复操作直到达到N.

以下代码片段的最坏情况运行时间的增长顺序是多少? 作为N?

的函数
int sum = 0;
for (int i = 1; i <= N; i = i*2)
    for (int j = 0; j < i; j++)
        sum++;

问题解释

答案是:N

内环的主体执行1 + 2 + 4 + 8 + ... + N~2N次。

2 个答案:

答案 0 :(得分:2)

我想你已经在你的问题中说明了答案 - 内循环执行2N次,即O(N)。在渐近(或大O)表示法中,任何倍数都会被删除,因为对于非常非常大的值,2N的图形看起来就像N,所以它不被认为是重要的。在这种情况下,问题的复杂性等于“sum ++”被调用的次数,因为算法非常简单。这有意义吗?

答案 1 :(得分:0)

复杂性不取决于嵌套循环的数量

it is O(Nc):
 

Time complexity of nested loops is equal to the number of times the
innermost statement is executed.

For example the following sample loops have O(N2) time complexity

for (int i = 1; i <=n; i += c) {
       for (int j = 1; j <=n; j += c) {
          // some O(1) expressions
       }
   }

   for (int i = n; i > 0; i += c) {
       for (int j = i+1; j <=n; j += c) {
          // some O(1) expressions
   }