【问题标题】:Recurrence relation for T(0) = 1, T(1) = 0, T(n ) = 2* T(n-2)T(0) = 1, T(1) = 0, T(n ) = 2* T(n-2) 的递归关系
【发布时间】:2017-10-14 23:15:17
【问题描述】:

我正在尝试查找上述表达式的递归关系。

我推断:

T(n) = C*T(n-2)

T(n-2) = 2C*T(n-4)

T(n-4) = 3C * T(n-6)

...

T(n) = k/2C * T(n-k)

我被困在这里。这是正确的方法吗?简化方程中没有T的简化递推关系是什么?

【问题讨论】:

  • 看起来不太对劲 - 当你每走一步时,2* 去哪儿了? (提示。这可能是指数级的)
  • 这看起来有两种情况:2^(n/2) 表示偶数 n,0 表示奇数。可能有一种方法可以使用地板运算符在单个表达式中编写它

标签: algorithm recursion recurrence


【解决方案1】:

我写了一个python程序,找到了关系:

def rec(num):
    if num == 0:
        return 1
    elif num == 1:
        return 0
    else:
        return 2 * rec(num - 2)

经过多次测试,我发现了这个规律:

索引 2、3、4、5、6、7、8....

结果 2、0、4、0、8、0、16....

所以结果可能是 2^(n/2) 当 n = 2k && 0 当 n = 2k + 1 (k 属于 Z)

【讨论】:

  • 我相信这是 2^(n/2),而不是 2^n。例如4 = 2^(4/2)
【解决方案2】:

让我们观察当我们扩展这个函数m 次时的行为:

T(n) = 2^2 * T(n - 2*2)
     = 2^3 * T(n - 2*3)
     = 2^4 * T(n - 2*4)
     = ...
     = 2^m * T(n - 2m)

当n 是:

  • 偶数:n - 2m最终等于0,表示最大值为m = n / 2,即T(n) = 2^(n/2)
  • 奇数:“最终等于1,这意味着T(n) = 2^(...) * T(1) = 0

如果我们想用一个表达式来写:

T(n) = (1 - n + floor[n/2]) * 2^(n/2)

【讨论】:

  • 这是有道理的!所以有两个结果的原因是因为 T(0) = 1 和 T(1) = 0。所以如果要通过归纳证明这一点,我必须同时证明偶数和奇数情况吗?
  • 两者的迭代步骤是相同的​​——只要证明如果 T(n) 为真,那么 T(n-2) 等也为真,但基本情况步骤将不同是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 2019-04-15
  • 2013-07-16
  • 2013-06-19
  • 1970-01-01
相关资源
最近更新 更多