[英]Finding the Big O time complexity
i = 1;
while (i <= n) {
j = n - i;
while (j >= 2) {
for (k = 1; k <= j; k++) {
s = s + Arr[k];
}
j = j - 2;
}
i = i + 1;
}
让我困惑的部分是它所说的地方
j = n - i;
while(j >= 2){
我不太确定该如何展示我的作品。 我很确定算法虽然是O(n ^ 3)。
您可以稍微简化一下,以便更清楚地看到内容:
for(i = 1; i <= n; i++)
{
for(j = n - i; j >= 2; j -= 2)
{
for(k = 1; k <= j; k++)
{
s = s + Arr[k];
}
}
}
现在事情应该更简单
for(i = 1; i <= n; i++)
: O(n) [实际上执行了n次] for(j = n - i; j >= 2; j -= 2)
:( (n-1)/2
在第一次迭代中, (n-3)/2
在第二次迭代中,依此类推... O(n) for(k = 1; k <= j; k++)
在第1次迭代中为n-2
在第n-2
次迭代中为n-3
,依此类推... O(n) s = s + Arr[k];
[简单操作]: O(1) 乘以每一步,您将得到O(n ^ 3)
如果您仍然遇到问题,建议您使用循环内的n
值和一个计数器运行此代码的一些模拟。 希望您能够看到O(n)
是每个循环的复杂度
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.