請參閱下面的解決方案,我想要一些建設性的反饋意見。循環迭代分析
下面的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)< - 有人知道我怎麼能進一步簡化這個?
編輯:我假設我們會用等差數列莫名其妙....
您的推理是有缺陷的:序列不是0xn^3 + 1x(n^3/2)+ 2x(n^3/4)+ ...,而是1xn^3 + 1x (n^3/2)+ 1x(n^3/4)+ ... = n^3×(1 + 1/2 + 1/4 + 1/8 + ...)= 2×n^3。 –