获得递归的时间复杂度:T(n)= 4T(n-1) - 3T(n-2)

时间:2014-09-21 06:38:02

标签: algorithm big-o time-complexity recurrence

我有一个递归关系:

T(n)=4T(n-1) - 3T(n-2)

我该如何解决这个问题? 任何详细解释:

我尝试的是我用右边的方法替换了T(n-1),我得到了这个:

 =16T(n-2)-12T(n-3)-3T(n-2)

但我不知道在何处以及如何结束这一点。

4 个答案:

答案 0 :(得分:3)

您不仅可以轻松获得此递归的时间复杂度,而且您甚至可以完全解决它。这要归功于线性递归关系背后的详尽理论,你在这里称之为homogeneous linear recurrence的特定情况。

要解决此问题,您需要编写一个特征多项式:t^2 -4t +3并找到它的根t=1t=3。这意味着您的解决方案的形式如下:

T(n) = c1 + 3^n * c2

如果您有边界条件,则可以获得c1c2,但对于您的情况,它足以宣称O(3^n)时间复杂度。

答案 1 :(得分:1)

虽然显然是O(4^n)(因为T(n)<=4*T(n-1)),但看起来可以证明一个较小的限制:

T(n) = 4*T(n-1) - 3*T(n-2)

T(n) - T(n-1) = 3*T(n-1) - 3*T(n-2)

D(n) = T(n) - T(n-1)

D(n) = 3*D(n-1)

D(n) = D(0) * 3^n

如果D(0)=0T(n)=const=O(1)

否则因为差异是指数的,所以得到的函数也将是指数函数:

T(n) = O(3^n)

答案 2 :(得分:1)

尝试T(n)= x ^ n给出二次方程:x ^ 2 = 4x - 3.这有x = 1和x = 3的解,所以T(n)的一般形式是a + b * 3 ^ N。 a和b的确切值取决于初始条件(例如,T(0)和T(1)的值)。

根据初始条件,解决方案将是O(1)或O(3 ^ n)。

答案 3 :(得分:0)

注意: - 通常,这种递归关系(重复递归函数调用次数,例如 - recurrence relation for a fibonacci sequence for value n)将导致指数时间复杂度。

首先,你的问题不完整。它不提供终止条件(重复终止的条件)。我认为它一定是

  

对于n = 1,T(n)= 1,对于n = 2,p(n)= 2

基于这个假设,我开始分解上述递归关系

在将T(n)代入T(n-1)后,我得到了这个:

16T(n-2) - 24T(n-3) + 9T(n-4)

这形成了2的幂的多项式

{(4^2)T(n-2) - 2.4.3 T(n-3) + (3^2) T(n-4)}

再次突破上述复发我们得到:

64T(n-3) -144T(n-4) + 108T(n-5) -27T(n-6)

是幂3的多项式

关于打破n-1术语的关系,我们将得到:

(4^n-1) T(1) - .............类似的东西

我们可以清楚地看到,在上面的扩展中,所有剩余的项都将小于4 ^ n-1所以,我们可以采用渐近符号:

O(4^n)

作为练习,您可以扩展多项式以获得更多项,还可以绘制递归树以找出实际发生的事情。