【问题标题】: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

标签: algorithm recursion asymptotic-complexity recurrence


【解决方案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,其中ab 是任意常数。等价于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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 2014-05-03
      • 1970-01-01
      相关资源
      最近更新 更多