计算算法的执行时间

时间:2013-12-26 11:21:00

标签: algorithm recurrence

我有这个算法:

S(n)
  if n=1 then return(0)
  else
    S(n/3)
    x <- 0
    while x<= 3n^3 do
       x <- x+3
    S(n/3)

2 * T(n/3) + n^3是否为递归关系?

执行时间是T(n) = O(n^3)吗?

2 个答案:

答案 0 :(得分:2)

重复表达式是正确的。算法的时间复杂度为O(n^3)

重复发生在T(1)停止。

n = 27运行示例有助于推导出一般表达式:

T(n) = 2*T(n/3)+n^3 =
= 2*(2*T(n/9)+(n/3)^3)+n^3 =
= 2*(2*(2*T(n/27)+(n/9)^3)+(n/3)^3)+n^3 =
= ... =
= 2*(2*2*T(n/27)+2*(n/9)^3+(n/3)^3)+n^3 =
= 2*2*2*T(n/27)+2*2*(n/9)^3+2*(n/3)^3+n^3

从这个例子中我们可以看到一般表达式由:

给出

enter image description here

相当于:

enter image description here

反过来,可以解决以下封闭形式:

enter image description here

此表达式中的主导词是(1/25)*27n^32^(log_3(n))O(n),您可以将其视为2^(log(n)*(1/log(3)));删除常量1/log(3)会{ {1}})因此,重复是2^log(n) = n

答案 1 :(得分:1)

2 * T(n/3) + n^3

是的,我认为这是正确的复发关系。

时间复杂度:

while x<= 3n^3 do
       x <- x+3

时间复杂度为O(n ^ 3)。此外,在每个步骤,该函数调用自己两次与1/3 n。所以系列应该是

n, n/3, n/9, ...

添加每个深度后的总复杂度

n^3 + 2/27 * (n^3) + 4/243 * (n^3)...

本系列以k*n^3为界,其中k为常量。

  

证明:如果它被视为具有1/2因子的GP,那么总和   变成2 * n ^ 3。现在我们可以看到,每一步,因素都是   不断减少,不到一半。因此上限小于2 * n ^ 3.

所以在我看来,复杂性= O(n ^ 3)。