干粮 -- 计算机程序设计艺术(The Art of Computer Design) - 2

1.2   数学准备

在这一节,我们将会对本书中所用到的一些基本的数学记号和公式进行讲解.如果你不想过多的设计这些复杂的数学推导,至少应该熟悉一下各个公式的含义,以便能够更好的使理解这些公式.

我们主要在两个方面用到数学公式和记号,一是用来描述整个算法的各个部分,二是用来分析算法的性能.

1.2.1          数学归纳法

令P(n)为关于n(n为整数)的一个命题,例如,P(n)可以是:n乘以(n+3)是一个偶数,或者”如果n≥10,则2n>n3”,如果我们想证明P(n)的正确性,那么,我们可以依照一下的步骤来:

a)       证明P(1)为真

b)       证明 ”如果P(1),P(2),P(3),…,P(n)都为真,那么P(n+1)也为真.

 

例如,很久以前人们就已经发现了如下的等式:

1 = 12

1+3 = 22

1+3+5 = 32 ………………………………………………………………………………………………………………….(1)

1+3+5+7 = 42

1+3+5+7+9 = 52

于是我们可以大胆的假设

1+3+5+…+(2n-1) = n2 …………………………………………………………………………………………………..(2)

现在我们暂且把(2)式称为P(n),并希望能够证明P(n)对于任意的正整数n都成立,根据数学归纳法的步骤,我们需要:

a)       P(1) 为真,因为 1 = 12

b)       如果 P(1),P(2),……,P(n)都为真.那么由于P(n)为真,于是等式(2)成立,在等式(2)的两边同时加上 (2n+1)则

1+3+…+(2n-1)+(2n+1) = n2 + 2n + 1 = (n+1)2

这样就证明了 P(n+1) 也为真

 

我们可以吧上面的步骤看做一个算法的证明步骤.

算法I: (构造一个证明).给出一个正整数n,这个算法将输出P(n)为真的证明

I1: [证明P(1)] 设k <- 1,并且根据a)输出一个P(1)的证明

I2: [k=n?] 如果k=n,那么算法终止,所需的证明已经输出

I3: [证明P(k+1)]根据b),输出一个关于”如果P(1),P(2),…,P(n)都为真,则P(k+1)为真”的证明.而且输出”我们已经证明了P(1),P(2),…,P(k),因此P(k+1)为真”

I4: [递增k] k加 1并转到I2.

该算法的框图:

 

由于这一算法显然给出了P(n)对任何给定的n的一个证明,因而我们知道,上述的证明技术(a),(b)在逻辑上是正确的(me:有点牵强啊,记得当初高代课,我们证明过,写了两大黑板的).这个证明方法就叫做数学归纳法证明.

需要注意的是,要把”数学归纳法”的概念和”归纳推理”区别开来.一个科学家通过特定的观察并且通过”归纳”,从而建立起说明这些事实的一般理论或假设.例如他可以通过观察(1)中的5个式子并且给出关系式(2).因此,归纳充其量不过是人们对某些事物的一些猜测.在数学领域里,我们将把这说成一个经验结果或一个猜测.

例如我们可以看看下面这个例子: 令P(n) 表示对n的划分的数目,也就是说,不管n的次序,把n写成若干个整数和的不同的方法的数目.由于:

5 = 1+1+1+1+1 = 2+1+1+1=3+1+1=2+2+1=3+2=4+1=5

因此我们有P(5) = 7.前几个值显然的我们可以得到

P(1) = 1, P(2) = 2, P(3)=3, P(4)=5, P(5)=7

那么,至此我们可以通过 “归纳”(me:注意,是归纳,不是数学归纳),而得出一个假设,P(n)将会跑遍所有质数. 为检验这个假设,我们来计算P(6) 而P(6) =11 和我们的推测是相符的.

(但是,很不荣幸的是,P(7)却等于15,完了,我们必须进行新的假设,)

而,另一方面,数学归纳法也完全不同于我们平常的”归纳”方法.它是有理有据的,而不是完全猜测的(me:有点熟悉,好像政治课本里面经常有这种语句). 实际上,由于对每个n都有一个结论,因而是无限多个的命题的一个证明.它之所以叫做数学归纳法,仅仅是因为,人们在应用数学归纳法之前需要稍微判定一下,他需要证明的是什么.

 

posted @ 2010-05-07 07:54  ~洛书~  阅读(407)  评论(4编辑  收藏  举报