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)?我对吗?
答案 0 :(得分:2)
求解下面的公式可以得到确切的迭代次数(并推导出增长复杂度的顺序):
结果凭经验验证了!
答案 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)强>