【问题标题】:Proving upper bound complexity for a recursive function?证明递归函数的上限复杂度?
【发布时间】:2015-07-21 01:50:02
【问题描述】:

我很困惑如何使用数学归纳法来证明使用递归关系的递归函数的大 O。

示例:

递归实现河内塔的递归关系是 T(n) = 2T(n-1) + 1
和 T(1) = 1。我们声称这种递归方法是 O(n) = 2n - 1。使用数学归纳法证明这一说法。

在递归的情况下,我是否总是假设 n = k-1,而不是 n = k?这是讲义给出的假设。

假设 f(n-1) = 2^(n-1) - 1 为真。

我理解非递归数学归纳法我们假设 n = k,因为它只是变量的变化。那么,为什么假设 n = k - 1 是安全的?

【问题讨论】:

  • 我会问这个作为 Stack Exchanges Computer Science 站点,因为它更适合那里。
  • 这与Java无关。标记已删除。
  • 在数学归纳法中,“假设”并不是您真正假设为真的东西。它是一个充分条件的陈述。您希望展示的是,如果关于一个数字的条件为真,那么它在逻辑上暗示下一个数字也适用某个结论。然后,您证明条件对于第一个数字为真,并结合条件所暗示的内容,您通过在整数上无限级联来证明结论。这就是感应的工作原理。如果一些不同的变量选择使数学更方便,那没关系。
  • @jpw 实际上,如果你看一下induction 标签的描述,它会说纯数学问题对于 SO 来说是完全没有话题的。
  • @jpmc26 我在帖子上没有看到任何归纳标签,我相信在Computer ScienceMathematics 上得到一个好的答案的机会会更好,尽管这一点现在还没有实际意义,因为它已经得到了回答。

标签: recursion big-o time-complexity


【解决方案1】:

一种可能的方法:为T 假设一个非递归公式并证明它。之后,表明你找到的公式在你想要的大 O 中。

为了证明,您可以使用归纳法,在这种情况下它既快速又简单。为此,您首先要证明您的公式适用于第一个值(通常是 01,在您的示例中是 1 和微不足道的)。

然后你证明如果它适用于任何数字n - 1,它也适用于它的继任者n。为此,您使用T(n) 的定义(在您的示例中为T(n) = 2 T(n - 1) + 1):您知道您的formla 适用于n - 1,您可以用您的公式替换T(n - 1) 的出现。在您的示例中,您将得到(使用公式T(n) = 2^n - 1

T(n) = 2T(n - 1) + 1
     = 2(2^(n - 1) - 1) + 1
     = 2^n - 2 + 1
     = 2^n + 1

如您所见,如果我们假设它适用于 n - 1,它适用于 n

现在是归纳技巧:我们证明了我们的公式适用于n = 1,并且我们证明了如果它适用于任何n = k - 1,它也适用于k。也就是说,正如我们为1 所证明的那样,它也为2 所证明。正如 2 所证明的那样,它也被 3 所证明。事实上……

因此,在我们的证明中,我们不假设 n - 1 的术语是正确的,我们只是在假设它是正确的情况下做出了陈述,然后针对一个初始情况证明了我们的公式,并使用了归纳法。

【讨论】:

  • 你数学的第一步让我很困惑。您可能需要添加一个额外的步骤来显示您正在为像我这样的厚头分发 2。 =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 2017-09-04
  • 2018-08-18
相关资源
最近更新 更多