我有一个递归关系:
T(n)=4T(n-1) - 3T(n-2)
我该如何解决这个问题? 任何详细解释:
我尝试的是我用右边的方法替换了T(n-1)
,我得到了这个:
=16T(n-2)-12T(n-3)-3T(n-2)
但我不知道在何处以及如何结束这一点。
答案 0 :(得分:3)
您不仅可以轻松获得此递归的时间复杂度,而且您甚至可以完全解决它。这要归功于线性递归关系背后的详尽理论,你在这里称之为homogeneous linear recurrence的特定情况。
要解决此问题,您需要编写一个特征多项式:t^2 -4t +3
并找到它的根t=1
和t=3
。这意味着您的解决方案的形式如下:
T(n) = c1 + 3^n * c2
。
如果您有边界条件,则可以获得c1
和c2
,但对于您的情况,它足以宣称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)=0
,T(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)
作为练习,您可以扩展多项式以获得更多项,还可以绘制递归树以找出实际发生的事情。