繁体   English   中英

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

[英]What is the worst-case time-complexity of this algorithm?

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)? 我对吗?

解决以下公式将为您提供确切的迭代次数(并推导出增长复杂度的顺序):

在此输入图像描述

结果经验验证!

外循环:

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)

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

第一个循环--->

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

第二个循环--->

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)...

第三循环--->

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有点依赖于nie, 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM