数学归纳,如何证明这个工作在这个递归函数中

时间:2014-02-06 21:13:48

标签: algorithm

我正在读这本书:The Algorithm Design Manual,我有一个问题要理解,这是关于归纳假设,所以我有这个伪代码:

Increment(y)
  if y = 0 
    then return(1) 
 else if (y mod 2) = 1 
   then return(2 · Increment(⌊y/2⌋))
  else 
    return(y + 1)

所以我要通过数学归纳证明这段代码确实有效,第一部分很简单:

if y = 0 
    then return(1)

最后一部分也很简单,它是偶数

else 
    return(y + 1)

但中间部分对我来说非常困难:

else if (y mod 2) = 1 
   then return(2 · Increment(⌊y/2⌋))

这是对这本书的解释:

Now, the case of odd y (i.e. y = 2m + 1 for some integer m) can be dealt with as:
(y = 2m + 1; because 2m + 1 is equal to any odd number)//this is what i understand

= 2 · Increment(⌊(2m + 1)/2⌋)//(2m + 1)/2 = m + 1/2
= 2 · Increment(⌊m + 1/2⌋)//ok we get here, but how (m + 1/2) will be the "m" bellow?
= 2 · Increment(m)
= 2(m+1)
= 2m+2 =y+1

任何人都可以解释如何证明这种递归真的有效吗?以及如何通过数学归纳证明这一点。

2 个答案:

答案 0 :(得分:8)

  

= 2·增量(⌊m+ 1 /2⌋)//好的,我们到了这里,但是如何(m + 1/2)将是“m”波纹管?

因为⌊m + 1/2⌋ = m,就这么简单。 (我假设您知道⌊m + 1/2⌋表示floor(m + 1/2)

请注意m是一个整数,假设1/2是小数,则floor(m+1/2)m。实际上,floor(m + x),其中0 <= x < 1仅为m:将任何小数部分添加到m不会更改floor()的结果。

所以你得到2 * Increment(m) = 2(m+1) = 2m+2 = (2m+1)+1 = y+1

更新:感应证明非常相似。

回顾一下归纳证据的总体布局:首先,我们详细阐述归纳假设。然后,我们证明这个假设适用于基本情况(通常,基本情况是当n = 0或n = 1时)。最后,但并非最不重要的是,我们使用假设表明,如果它适用于n的某些值,那么它也适用于n+1。由于假设适用于基本情况,并且因为我们显示(带有归纳步骤),如果它适用于n,那么它适用于n+1,那么它必须对于大于或等于基本案例值的每个值都应为true。

<强>假设

在这种特殊情况下,我们的假设是这个函数:

I(n) = 1 if n is 0
       n+1 if n is even
       2 * I(floor(n / 2)) otherwise

等于n+1,即

I(n) = n+1

I(n)只是Increment(n)的简写符号。您还可以将假设视为一组3个数学陈述(换句话说,假设三个案例中的每一个在所述条件下评估为n+1

基本情况

基本情况是n = 0。对于n = 0I(n)评估为1n+1n为0),因此我们证明该假设适用于{{1} }}

现在,我们想要证明,如果我们的假设适用于n = 0,那么它适用于n

归纳步骤

如果n+1成立,则I(n) = n+1必须为true。基本上,我们说,“好的,如果I(n+1) = (n+1)+1评估其参数加一,那么这意味着I(n)必须是I(n+1)。这是我们必须证明的:我们必须展示(n+1)+1

现在,根据I(n+1) = (n+1)+1的原始定义,我们有两种情况:要么是偶数,要么是奇数。

这一次,函数I(n)的参数是I - 让我们考虑两种情况。

如果n+1是偶数,根据n+1的定义,我们可以立即看到I(n)

如果I(n+1) = (n+1)+1是奇数,那么我们知道n+1对于某个整数n+1 = 2m+1,因为如果m是奇数,则n+1是偶数,表示n小于mn。因此,我们可以将2m = n重写为n+1

2m+1

这表明如果I(n+1) = I(2m + 1) = = 2 * I(floor((2m+1) / 2)) = = 2 * I(floor(m + (1/2)) = = 2 * I(floor(m)) = // we can remove 1/2 for the same reason = 2 * I(m) = = 2 * (m+1) = // inductive step; we used the hypothesis that I(n) = n+1 = 2*m + 2 = = (2*m+1) + 1 = = (n+1) + 1 的命题为真(因为floor(n/2)m),那么n/2也是如此。通过使用strong induction,我们可以证明如果所有m的命题都为真,0 <= m <= n,则n + 1也是如此(见下面的评论)。

确实,n+1代表任何整数,假设 I(n+1) = (n+1)+1 有效

我们发现假设适用于I(n) = n+1,如果它适用于n+1,我们发现它适用于n。因此,它适用于n = 0

答案 1 :(得分:0)

but how (m + 1/2) will be the "m" bellow?

1/2会导致0

中的商C