除了主定理、递归树和代换法之外,我不熟悉其他的循环求解技巧。我猜测解决下面这个循环求解式的大O边界并没有使用那些方法:
T(n) = T(n-1) + 2T(n-2) + 1
除了主定理、递归树和代换法之外,我不熟悉其他的循环求解技巧。我猜测解决下面这个循环求解式的大O边界并没有使用那些方法:
T(n) = T(n-1) + 2T(n-2) + 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所提到的,可以用消灭者法则来创造这种魔幻。现在我们只需要解决线性齐次递推关系。特征多项式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)
,除了特殊情况外。
T(n) = T(n-1) + 2T(n-2) + 1
T(n+1) = T(n) + 2T(n-1) + 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(n)
的基本情况是什么? - Tim Biegeleisen