2

请参阅下面的解决方案,我想要一些建设性的反馈。

下面 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) <- 有谁知道我可以如何进一步简化它?

编辑:我假设我们会以某种方式使用算术级数......

4

2 回答 2

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)

于 2012-06-20T03:01:16.777 回答
0

我认为您可以通过以下正式方程式得出增长复杂度的顺序:

在此处输入图像描述

于 2014-04-05T16:40:42.010 回答