[英]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.