请参阅下面的解决方案,我想提供一些建设性的反馈。
下面的O(n)中的运行时间是什么。
int a = 0;
int k = n*n*n; //n^3
while(k > 1)
{
for (int j=0; j<k; j++) //runs from 0->k
{ a--; }
k = k/2; //divides by 2 each iteration
}
每次for循环运行时,它给出一个常数x k。
= 0xn ^ 3 + 1x(n ^ 3/2)+ 2x(n ^ 3/4)+ ... + nx(n ^ 3/2 ^ n)
= n ^ 3(0 + 1/2 + 2/4 + ... + n / 2 ^ n)&lt; - 任何人都知道如何进一步简化这一点?
编辑:我假设我们会以某种方式使用算术系列....
答案 0 :(得分:2)
让我们先用k
在第一个while循环中,for循环运行k次
在第二个while循环中,for循环运行k / 2次
在第三个while循环中,for循环运行k / 4次
...
所以它总共运行(k + k / 2 + k / 4 + k / 8 + ... + 1)次
提取k后,它是k *(1 + 1/2 + 1/4 + 1/8 + ... + 1 / k)
随着k增加,括号中的部分变为2,我们可以忽略
将k改为n ^ 3,结果为O(n ^ 3)
答案 1 :(得分:0)
我认为你可以通过下面的以下形式公式来提出增长复杂性的顺序: