计算机程序设计艺术-卷1-1.2.1 数学归纳法

147 阅读2分钟

1.2.1 数学归纳法

P(n)P(n)是关于整数nn的某个命题,假定我们需要证明P(n)P(n)对于所有正整数nn为真,一种重要的做法是:

(a) 证明P(1)P(1)为真;

(b) 证明“如果P(1),P(2),...,P(n)P(1),P(2),...,P(n)全部为真,那么P(n+1)P(n+1)也为真”,这个证明应对任意正整数n成立。

数学归纳法的算法形式

算法I(构造证明). 给定一个正整数n,这个算法将产生P(n)P(n)为真的证明。

I1. [证明P(1)P(1).]置 k ← 1,证明P(1)P(1)为真

I2.[k=nk=n?] 如果k=nk=n,算法终止,所需的证明已经输出。

I3.[证明P(k+1).P(k+1).] 证明:如果P(1),...,P(k)P(1),...,P(k)全部为真,那么P(k+1)P(k+1)为真

I4.[增加kk.]kk增加1,转到步骤I2

数学归纳法的应用

通过归纳法证明算法E对所有m和n都能得到正确答案,即能找到最大公约数。

算法E(推广的欧几里得算法).给定两个正整数m和n,计算它们的最大公因数dd,并计算两个未必为正数的整数aabb,使得am+bn=dam+bn=d

E1.[初始化.] 置ab1,ab0,cm,dna'←b←1,a←b'←0,c←m,d←n.

E2.[除法.]令qqrr分别是用ddcc所得的商和余数.(于是有c=qd+rc=qd+r0r<d0\leq r < d.)

E3.[余数为0?]如果r=0r=0,算法终止,此时有am+bn=dam+bn=d,正如所求。

E4.[循环.]置cd,dr,ta,aa,atqa,tb,bb,btqbc←d,d←r,t←a',a'←a,a←t-qa,t←b',b'←b,b←t-qb,然后返回E2.

证明:

n=1n=1时,算法执行到E2,此时c=m,d=1c=m,d=1,那么q=m,r=0q=m,r=0;随后算法执行到E3时终止。算法有效。

n>1n > 1时,且mmnn的倍数。此时与n=1n=1时类似,其实n=1n=1是此种情形的特例。算法有效。

按归纳法可以假设,当1k<n1 \leq k < n时,dd的最终值是mmkk的最大公约数,算法均有效。

n>1n>1时,且m不是n的倍数。算法第一次执行后:cnc←ndrd←r,由于r<nr<n,根据归纳假设:dd的最终值是nnrr的最大公约数。

又根据1.1节给出的结论(讨论算法的5个特征中的“输出”部分给出的结论),数偶{m,nm,n}和{n,rn,r}具有相同的公因数,特别地,它们具有相同的最大公因数。

因此,dd也是mmnn的最大公约数,此时算法有效。

关于E4aaaa'bbbb'更新规则的说明:

在计算过程中,c=qd+rc=qd+raa'bb'分别为前一轮的aabb,于是:am+bn=ca'm + b'n = cam+bn=dam + bn = d

c=qd+rc=qd+r可得r=cqdr=c-qd,由于c=am+bnc=a'm + b'nd=am+bnd=am + bn,带入r=cqdr=c-qd可得:

r=(am+bn)q(am+bn)r=(a'm + b'n)-q(am + bn)

r=(aqa)m+(bqb)nr=(a'-qa)m + (b'-qb)n