【问题标题】:Functional recurrence on a constant?功能性复发是恒定的?
【发布时间】:2011-03-25 04:08:24
【问题描述】:

我得到这个递归关系:

T (n) = T (n − a) + T (a) + cn

C > 0 , a >= 1 ..

我的问题是 T (a) ,我不明白你如何“重复”一个常量??

比如,如果我想构建一个循环树,我会这样做:

T (n) =>  cn            =>         cn
         /  \                    /    \
      T(a)  T(n - a)           ca      c*(n-a)
                             /    \     /     \
                            ??    ??  T(n-2a)  T(a)

你明白我的意思吗? T(a)代表什么??

任何资源将不胜感激。谢谢。

或者,反复思考:

T (n) = T (n − a) + T (a) + cn
T (n) = T (n -2a) + T (a) + ????

【问题讨论】:

标签: algorithm iteration recurrence


【解决方案1】:

可能比提出问题要晚得多,但为了完整起见,这是我对答案的看法。

【讨论】:

  • 出于多种原因,将其转录成打字文本会更有价值。
【解决方案2】:

所以你有:

T(n) = T(n-a) + T(a) + cn

什么是 T(n-a)?只需将 n-a 作为您的输入:

T(n-a) = T((n-a)-a) + T(a) + c(n-a)

现在什么是 T(a)?同样,将 a 作为输入:

T(a) = T(a-a) + T(a) + ca

结合它们,你得到:

T(n) = ( T((n-a)-a) + T(a) + c(n-a) )+ ( T(a-a) + T(a) + ca ) + cn
     = T(n-2a) + T(a) + c(n-a) + T(0) + T(a) + ca + cn
     = T(n-2a) + 2T(a) + T(0) + c((n-a) + a + n)

现在根据您的基本情况,T(0) 可能是一些常数。 希望对您有所帮助。

【讨论】:

  • 就像,如果 T(a) = T(a-a) + T(a) + ca 这意味着无限递归,对吧?因为 T(a) = T(a) + ...
  • 确实如此,这让它与众不同。你想出来了吗?因为通常这两个部分都是 n 的分数,这使您能够找到一个明确的递归公式,例如 T(n/2) + T(n/2)。
  • 是的,我以为出了点问题..这实际上是我算法课上的一个作业,而且我一如既往地决定在提交前一天开始,所以我无法验证的“正确性”问题本身^^; .. 非常感谢。
  • 为了那些可能偶然发现这个问题的人的利益:这种方法有两个可能的问题 - 1. 当替换 n = a 来确定 T(a) 时,我们得到:T (a) = T(0) + T(a) + 约。现在,a>=1 且 c>0,所以我们马上知道 T(0) 不能为 0,并且它是 -ca 来平衡该等式。但是当然,一旦我们这样做了,我们就只有 T(0) = -ca 作为等式,没有别的了。 2. 我们可能不需要递归 T(a),因为 OP 面临同样的困难——它是一个常数。为什么要在常数上建立递推关系?
猜你喜欢
  • 2016-01-05
  • 2018-12-16
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多