展开方法适用于:当n = 0和2T(n-1)+1时T(n)= 1

时间:2019-01-26 20:44:09

标签: algorithm math recurrence

对于

    当n = 0时
  • T(n)= 1
  • T(n)= 2T(n-1)+1否则

我知道我们应该寻找模式并深入理解问题,直到我们开始用不同的变量转换方程式为止。但是,一旦到达那里,我就不知道它是如何完成的以及为什么某些事情要完成。

我的问题特别是在2 i ·T(n-1)用 n 替换 i 的问题。但是,完整的解释也将很有用!

picture of the unrolling method

2 个答案:

答案 0 :(得分:0)

99999 10 是100000 10 -1,11111 2 是100000 2 - 1。

有两种方法可以解决此问题。一种是来自任意 n 的向后工作,您的描述中已经介绍过。我发现有帮助的另一种方法是从零开始一直到 n

  • T(0)= 1
  • T(1)= 1 << 1 + 1 = 3
  • T(2)= 3 << 1 + 1 = 7
  • ...

此处<<是二进制数的“左移”运算符,等效于乘以2。此运算符在许多编程语言中相当普遍。它有助于表明您在此过程的每个步骤中仅添加了1位。回到第一个断言, n 个连续的一位等效于2 n +1 -1。

您问题中的解释仅使用 i 作为从1到 n 的计数器。除了作为步数计数器之外,它不属于方程式的一部分。在最后一步, i = n ,因此您可能会困惑于转换。

答案 1 :(得分:0)

第一次看到公式时,我遇到了与您相同的问题。但是,让我们从头开始。
首先,您尝试逐步达到n的最终深度i。因此,对于每个数字i,您都可以解决公式i次(在图片i=1i=2i=3i=4中),但是请注意,您还无法解析T(n-i)。但是您可以导出i=n的模式。这行实际上是从错误开始的:图片显示i=n-i,但实际上应该是i=n,因为您到达了底部。
其余的内容很简单:写下您看到的模式并将其放在Sum公式(Sum_{j=0}^{i-1}2^j)中。您可以将i替换为n,因为这是该行的前提。您用T(n-n)代替T(0)=1。接下来,您应用有限几何级数,因此摆脱了总和符号。其余的应该清楚。