如何解决以下复发?

时间:2016-02-18 03:45:50

标签: algorithm recursion asymptotic-complexity recurrence

我不熟悉主定理,递归树和替换方法之外的递归求解技术。我猜测解决大O绑定的以下重现不会使用以下方法之一:

T(n) = T(n-1) + 2T(n-2) + 1

2 个答案:

答案 0 :(得分:3)

我们可以进行替换U(n) = T(n) + 1/2然后再次出现

U(n) = T(n) + 1/2
     = T(n-1) + 2T(n-2) + 1 + 1/2
     = T(n-1) + 1/2 + 2(T(n-2) + 1/2)
     = U(n-1) + 2U(n-2),

这有点神奇但是,正如templatetypedef提到的,魔法可以用歼灭方法创造。现在我们只需解决线性齐次递归问题。特征多项式x^2 - x - 2因子为(x+1)(x-2),因此解为U(n) = a(-1)^n + b2^n,其中ab是任何常量。同等地,T(n) = a(-1)^n + b2^n - 1/2Theta(2^n),特殊情况除外。

答案 1 :(得分:2)

此递归称为non-homogeneous linear recurrence.,它通过将其转换为同类递归来解决:

T(n) = T(n-1) + 2T(n-2) + 1
T(n+1) = T(n) + 2T(n-1) + 1

从2中减去1并更改基数,得到T(n) = 2 T(n-1) + T(n-2) - 2 T(n-3)。相应的特征方程是:

x^3 - 2x^2 - x + 2 = 0

有解决方案x = {-1, 1, 2}。这意味着递归看起来像:

c1 * (-1)^n + c2 * 2^n + c3 * 1^n = c1 * 2^n + c2 (-1)^n + c3

在知道T(0)和T(1)的情况下可以找到所有这些常数。对于您的复杂性分析,很明显这是指数O(2^n)