分析最坏情况的增长顺序

时间:2014-09-15 11:44:45

标签: algorithm big-o complexity-theory big-theta

我尝试分析此算法的最坏情况增长顺序为N的函数:

for (int i = N*N; i > 1; i = i/2)
     for (int j = 0; j < i; j++) {
           total++;
     }

我尝试的是通过查看内部和外部循环来分析行total++的运行次数。内循环应运行(N^2)/2次。外环我不知道。有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:2)

语句总++;将运行若干次:

= N^2 + N^2 / 2 + N^2 / 4 ... N^2 / 2^k
= N^2 * ( 1 + 1/2 + 1/4 + ... 1/2^k )

上述表达式中的术语数= log(N ^ 2)= 2log(N)。

Hence sum of series = N^2 * (1 - 1/2^(2logN)) / (1/2)
                    = N^2 * (1 - 1/4N) / (1/2).

Hence according to me the order of complexity = O(N^2)

答案 1 :(得分:0)

外部循环将以log(N)的复杂度运行,因为系列在每次迭代时减少到一半。例如二元搜索。

答案 2 :(得分:0)

对于这个问题,因为内循环取决于外循环变化的变量的值(所以你不能简单地通过乘以内循环和外循环的值来解决这个问题)。你将不得不开始在a中编写值,然后尝试找出系列,然后解决系列以获得答案..

就像你的问题一样,总++会运行..

n^2 + n^2/2 + n^2/2^2 + n^2/2^3 + .....

然后,取n ^ 2常见,我们得到

n^2 [ 1 + 1/2 + 1/2^2 + 1/2^3 + ...]

解决这个系列以获得答案

答案 3 :(得分:0)

外部循环运行2LOG (base 2) N + 1次(Float到int转换并删除小数位)。如果您看到值减小,如N ^ 2,N ^ 2/2,N ^ 2/4 ...... 1. ..

因此,总运行++的总次数为

  

Summazion(x从0到int(2LOG(基数2)N + 1))N ^ 2/2 ^ x