内循环的时间复杂度

时间:2014-12-18 04:30:24

标签: c++ for-loop time complexity-theory time-complexity

我对以下程序的时间复杂性有疑问。我知道为什么第一个for循环是n + 2但是第二个for循环为什么它是(n + 1)/ 2?

//示例for循环 //这不是一个完全编码的程序,仅用于循环时间复杂度分析

for (int i=n; i>=0; i--) //n + 2
    for (int j=i; j<n; j++) // (n+2)(n+1)/2
        cout << i << “,” << j <<endl; //(n+1)(n)/2

4 个答案:

答案 0 :(得分:2)

内循环运行n-i次;即,i==n时运行0次,i == n-1时运行1次,n时运行i == 0次;共计n*(n+1)/2次。 (不是(n+1)*(n+2)/2,如您的评论中所述)。

由于内循环已启动n+1次(而不是n+2,正如您所述),可以公平地说平均值次数运行是n/2

答案 1 :(得分:2)

首先,你的第一个循环的时间复杂度为O(n),嵌套循环法线的时间复杂度为O(n ^ 2),但对于i的每个值,内循环执行i次。外循环执行n次,因此您会看到如下执行模式:1 + 2 + 3 + 4 + ... + n次

具体信息:

  1. O(1):函数(或一组语句)的时间复杂度 如果它不包含循环,递归和调用,则认为是O(1) 任何其他非恒定时间函数。

  2. O(n):a的时间复杂度 如果循环变量递增/则循环被视为O(n) 减少一定量。例如以下功能 具有O(n)时间复杂度。

  3. O(n ^ c):嵌套循环的时间复杂度等于执行最内层语句的次数。

  4. 来源 - &gt; Link

答案 2 :(得分:2)

i从1迁移到N,将j从1迁移到i的当前值,就像探索维度{{ 1}} N,对角分割。要理解这一点,请在纸上为自己绘制表格:行上的N+1,列上的i,以及嵌套循环访问的每个单元格中的刻度。

答案 3 :(得分:0)

for循环的时间复杂度为O(N ^ 2)。

我刚刚在codereview.stackexchange.com上回答了类似的问题。

这是一个简单的程序,用于说明循环的时间复杂度。

#include <iostream>
using namespace std;

int main()
{
   const int N = 10;

   int numTotalOps = 0;
   for (int i = 0; i < N; ++i)
   {
      size_t numOps = 0;
      for (int j=i; j < N; j++)
      {
         cout << i << "," << j << endl;
         ++numTotalOps;
         ++numOps;
      }
      cout << "\nNumber of operations for i = " << i << ": " << numOps << endl;
   }

   cout << "\nNumber of total operations: " << numTotalOps << endl;
   return 0;
}

输出:

0,0
0,1
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9

Number of operations for i = 0: 10
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9

Number of operations for i = 1: 9
2,2
2,3
2,4
2,5
2,6
2,7
2,8
2,9

Number of operations for i = 2: 8
3,3
3,4
3,5
3,6
3,7
3,8
3,9

Number of operations for i = 3: 7
4,4
4,5
4,6
4,7
4,8
4,9

Number of operations for i = 4: 6
5,5
5,6
5,7
5,8
5,9

Number of operations for i = 5: 5
6,6
6,7
6,8
6,9

Number of operations for i = 6: 4
7,7
7,8
7,9

Number of operations for i = 7: 3
8,8
8,9

Number of operations for i = 8: 2
9,9

Number of operations for i = 9: 1

Number of total operations: 55