如何找到以下递归关系的时间复杂度?

时间:2018-12-25 02:48:35

标签: algorithm time-complexity recurrence

算法的运行时间由以下递归关系表示;

T(n)= n如果n <= 3

T(n)= T [n / 3] + cn否则

如何找到该算法的时间复杂度?

我得到了一个大单词then(n)的答案。但是我不知道如何找到它。所以我想知道找到它的过程。

3 个答案:

答案 0 :(得分:4)

尝试多次展开递归以查看出现哪种模式可能会有所帮助:

  

T [n]

     

= T [n / 3] + cn

     

= T [n / 9] + cn / 3 + cn

     

= T [n / 27] + cn / 9 + cn / 3 + cn

     

= T [n / 81] + cn / 27 + cn / 9 + cn / 3 + cn

更一般地说,这种复发似乎可以解决

  

cn + cn / 3 + cn / 9 + cn / 27 + cn / 81 + ...

     

= cn(1 + 1/3 + 1/9 + 1/27 + 1/81 + ...)。

该和是几何级数的和。如果您足够破解这个,那就太好了!如果不是这样,请拉起您友善的社区Wikipedia,然后查看其中的公式。

在这种情况下,上述策略效果很好,但是对于更常见的重复,使用主定理通常会有所帮助,该定理可以立即解决许多此类重复问题。有关该定理及其使用方法的详细信息,请查阅Wikipedia。

答案 1 :(得分:2)

T(n)= T(n / 3)+ cn

或T(n / 3 ^ 2)+ cn / 3 + cn

或T(n / 3 ^ 3)+ cn / 3 ^ 2 + cn / 3 + cn

以此类推

最后,T(n)= T(n / 3 ^ k)+ cn / 3 ^(k-1)+ cn / 3 ^(k-2)..... cn / 3 + cn .. 。(1)

现在的基本情况

n / 3 ^ k <= 3或k> = log(base 3)(n / 3),为简单起见,仅考虑相等性

因此等式1将变为

T(n)= n + cn / 3 ^(k-1)+ cn / 3 ^(k-2)..... cn / 3 + cn

或者n + cn(1 + 1/3 + 1/3 ^ 2 .... + 1/3 ^(k-1)这就是GP

或n + cn(1.(1-1/3 ^(k-2))/(1-1 / 3))

或n + cn((3 ^(k-1)-3)/ 2。3 ^(k-2))

将k的值放入上述方程式

n + cn((3 ^(log(base 3)(n / 3 ^ 2))/(2. 3 ^(log(base 3)(n / 3 ^ 3))

最终得到n +(3/2)cn

或T(n)= n(1+(3/2)c)这是Theta(n)

答案 2 :(得分:1)

T(n) = cn + T(n/3)
     = cn + cn/3 + T(n/9)
     = cn + cn/3 + cn/9 + T(n/27)
Taking the sum of infinite GP series. The value of T(n) will
be less than this sum.
T(n) <= cn(1/(1-1/3))
     <= 3cn/2

or we can say 
cn <= T(n) <= 3cn/2
Therefore T(n) = \theta(n)
  

否则,您也可以使用主定理。