估计算法运行时间的增长顺序

时间:2014-09-11 10:39:05

标签: java algorithm data-structures

我正在关注一个在线课程,我无法理解如何估算算法的增长顺序这里的例子

以下代码片段的最坏情况运行时间的增长顺序是多少? 作为N?

的函数
   Int sum = 0;
   For (int i = 1; i <= 4*N; i = i*4)
     for (int j = 0; j < i; j++)
    sum++;

任何人都可以向我解释如何获得它

3 个答案:

答案 0 :(得分:3)

只计算语句sum++;的执行次数。

= 1 + 4 + 16 + 64 ... + 4 * N

这是几何级数,公因子为4.如果此系列中的术语数为k,则

4^k = 4*N.

Sum of series = (4^k - 1)(4-1) = (4*N - 1)/3.

为了增长,我们忽略了常数因素。

因此复杂性为O(N)。

答案 1 :(得分:1)

这非常简单:

外循环有log(N) + 1次迭代(对数为4)。

x为外循环迭代次数。内循环迭代4^x次。

因此,总运行时为Sum(4 ^ x) for x in [0..c],其中clog(N)这是geometric series,它的总和可以使用wiki中的公式轻松计算:

Sum(4 ^ x) for x in [1..c] = (1 - 4^c)/(1 - 4) = (4 ^ c)/3。现在c是基数4中的log(N),因此4^c = N。因此总答案是N,有一些常数因素。

答案 2 :(得分:1)

在找到算法的顺序时,我们找到算法经历的步骤总数

这里最里面的循环的步数等于i的当前值。

让我通过

中的值i1,i2,i3 ......

因此,算法中的步骤总数为 - &gt;&gt; i1 + i2 + i3 + ... in。

这里i1,i2,i3 ......的值是1,4,64 ... 4N;这是GP,第一项= a = 1和最后一项 等于4N。因此,该算法的复杂性是本GP中所有术语的总和。

SUM = 1 + 4 + 64 + ... 4N

GP的总和n项a,ar,ar ^ 2 ... ar ^(n-1)= a((r ^ n)-1)/(r-1)= a(L * r- 1)/(R-1) 其中L =最后一个词;

这里我们的例子中sum = 1 *((4 * 4N)-1)/ 3 这是上一学期L的约1.33倍 SUM = 1.33 * 4N 这是N的线性顺序

因此,步数是N和N的线性函数 因此算法的复杂度为N阶;即O(n)。