如何解决以下复发?
Posted
技术标签:
【中文标题】如何解决以下复发?【英文标题】:How to solve the following recurrence? 【发布时间】:2016-05-30 02:04:37 【问题描述】:我不熟悉主定理、递归树和替换方法之外的递归求解技术。我猜想为大 O 界解决以下递归不使用这些方法之一:
T(n) = T(n-1) + 2T(n-2) + 1
【问题讨论】:
T(n)
的基本情况是什么?
这是使用歼灭者方法的好地方......我实际上不知道该怎么做。 :-)
未提供基本情况。我猜它不需要实现大 O 界限?
提示:T(n) = 2^n。此外,请查看this math stackexchange question。
【参考方案1】:
我们可以替换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 所提到的,可以使用 annihilator 方法创建魔法。现在我们只需要解决线性齐次递归。特征多项式x^2 - x - 2
因子为(x+1)(x-2)
,因此解为U(n) = a(-1)^n + b2^n
,其中a
和b
是任意常数。等价于T(n) = a(-1)^n + b2^n - 1/2
,即Theta(2^n)
,特殊情况除外。
【讨论】:
【参考方案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)
。
【讨论】:
以上是关于如何解决以下复发?的主要内容,如果未能解决你的问题,请参考以下文章
r 如何使用ROC分析比较复杂的复发风险模型。该分析使用置换方法的实现