我正在读这本书: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
任何人都可以解释如何证明这种递归真的有效吗?以及如何通过数学归纳证明这一点。
答案 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 = 0
,I(n)
评估为1
,n+1
(n
为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
小于m
,n
。因此,我们可以将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