这种算法的最坏情况时间复杂度是多少?

时间:2014-08-29 08:17:46

标签: c algorithm data-structures big-o

void intFunction (int n, int value)
{
     int b,c;
     for (int j = 4; j < n; j++) {
          for (int i = 0; i < j; i++) {
               b *= val;
               for (int k = 0; k < n; ++k)
                    c += b;
          }
     }
}

我刚刚学会了Big-O概念。所以对于这个代码,根据我的理解,外部循环运行时间是n,第二个内部循环运行n(n + 1)/ 2,内部循环也是n(n + 1)/ 2。所以运行时间是O(N ^ 5)?我对吗?

3 个答案:

答案 0 :(得分:2)

求解下面的公式可以得到确切的迭代次数(并推导出增长复杂度的顺序):

enter image description here

结果凭经验验证了!

答案 1 :(得分:2)

外循环:

for (int j = 4; j < n; j++) 

迭代n - 4次,因此它是O(n)。内循环:

for (int i = 0; i < j; i++)

最多迭代n - 5次,因此这也是O(n)。最内在的一个:

for (int k = 0; k < n; ++k)

迭代n次,因此它是O(n)。最终的复杂性是O(n * n * n) = O(n^3)

答案 2 :(得分:1)

让我们按照迭代次数来验证时间复杂度!

第一个循环---&gt;

for (int j = 4; j < n; j++){...}  // it will iterate for n-4 times.

第二次循环---&gt;

for (int i = 0; i < j; i++){...}  //it'll iterate for j-1 times for each iteration of outer loop started by j. See,this is dependent on First Loop(the outermost loop)...

第三循环---&gt;

for (int k = 0; k < n; ++k){...}  //it'll always run n times independent to any previous-iteration whenever it is executed

因此,案例的整体迭代将是(在一个简化版本中): -

(n-4)*(j-1)*n times. 

但是,j本身从4变为n-1。所以,j有点依赖于n。即,4<=j<=n-1。 //所以,这里j将迭代n-5次......

确切的治疗将是这样的: -

n*n-5*n=n^3-5*n^2.

等于O(n^3)

因此,在最坏情况分析中,迭代次数将是 n ^ 3-5 * n ^ 2 ,并且它的时间复杂度将 O(n ^ 3)