证明递归函数的上界复杂性?

时间:2014-02-12 00:28:45

标签: recursion big-o time-complexity

我很困惑如何使用数学归纳来证明Big 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?

是否安全

1 个答案:

答案 0 :(得分:2)

一种可能的方法:假设T的非递归公式并证明它。之后,显示您找到的公式是您想要的Big 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

正如您所看到的,如果我们认为它适用于n - 1,则它适用于n = 1

现在出现了归纳的诀窍:我们展示了我们的公式适用于n = k - 1,我们展示了如果它适用于任何k,它也适用于1。也就是说,正如我们为2所证明的那样,2也证明了这一点。正如3证明的那样,n - 1也证明了这一点。因为它是......

因此,在我们的证明中,我们不假设该术语对于{{1}}是正确的,我们只是在假设它是真的时才做出声明,然后在一个初始案例中使用我们的公式,并使用归纳法。