數學歸納法及例題分析

前言

學算法,不得不提的就是數學歸納法。許多算法都會用到歸納假設的思想,其追溯回去便是數學歸納法。

數學歸納法

最簡單和常見的數學歸納法是證明當n等於任意一個自然數時某命題成立。證明分下面兩步:

  1. 證明當n = 1時命題成立。
  2. 證明如果在n = k時命題成立,那麼可以推導出在n = k+1時命題也成立。(k代表任意自然數)

這種方法的原理在於:首先證明在某個起點值時命題成立,然後證明從一個值到下一個值的過程有效。當這兩點都已經證明,那麼任意值都可以通過反覆使用這個方法推導出來。把這個方法想成多米諾效應也許更容易理解一些。例如:你有一列很長的直立着的多米諾骨牌,如果你可以:

  1. 證明第一張骨牌會倒。
  2. 證明只要任意一張骨牌倒了,那麼其下一張骨牌也會因爲前面的骨牌倒而跟着倒。

那麼便可以下結論:所有的骨牌都會倒下。

應用舉例

1. 前n項和

證明:S(n) = 1 + 2 + 3  ….  + n 前n項和爲n(n + 1) / 2

n = 1, S(1)  = 1

假設n時命題成立

N+ 1時,

S(n  + 1) 

=  S(n) + n + 1

= n(n + 1)/2 + n + 1

= (n + 1)(n + 2)/ 2

成立

2. 區域計數

問n條居一般位置的直線能將平面分成多少個區域

定義:一般位置, 任意兩線不平行,任意三線不共點。

現在草稿紙上看看簡單的情況,看看有沒有規律。

直線 -- 區域

1 --  2

2 -- 4

3 -- 7

4 -- 11

 

 

找規律 第n條直線能比n-1條直線的區域多n個

證明: 在平面內n- 1條居一般位置的直線添加一條直線會增加n個區域

n <= 3 時 顯然成立

假設n-1條直線時成立

加入第n條直線

假設刪去第n - 1條直線,

根據假設,這樣加入的第n條增加了n - 1區域

而放回第n-1條直線,直線l(n)與l(n-1)必然在某一個區域R裏面相交

本來對於一個區域,l(n)穿過可以多出來一個區域

因爲l(n - 1)的存在,在R中l(n)多分出兩塊,其他還是一樣

所以l(n)多分出n塊區域

成立

3. 着色問題

證明:平面上任意直線構成的區域可以用兩種顏色進行着色,相鄰的區域顏色不同

n = 1, 顯然成立

假設n - 1條直線情況下成立

對於n條直線

加入第n條直線ln

ln 左邊的區域所有顏色不變

ln 右邊的區域所有顏色翻轉

兩種情況

  1. 兩區域在同一邊,原來不同,加入ln,要麼都不變,要麼都翻轉,還是不同
  2. 兩區域的原來是一塊的,顏色相同,被ln分開,一邊翻轉了,顏色不同

命題成立

4. 金字塔求和

證明:第i行的和爲i^3

要證第i行的和爲i^3

即證第i+1行和-第i行和 =( i+1)^3 - (i)^3

而看圖

i行有i個數

i行第一個與i+1行第一個相差2*i

兩兩相減,最後多一個

2 * i* i + x= ( i+1)^3 - (i)^3

即證明i行最後一個數爲[( i+1)^3 - (i)^3] -  2 * i * i = i^2 + 3 * i +1

即證明i+1行最後一個 - i行最後一個是(i+1)^2 + 3 * (I+1) +1 -  [ i2 + 3 * i +1] = 2i + 2

由於前面已經看到i+1行與i行前面兩兩對其相差2I, 所以最後一個相差2i + 2

命題成立

5. 簡單不等式

證明1/2+1/4+1/8+…+1/2^n<1.
n = 1, 1/2 < 1, 成立
假設1/2+1/4+1/8+…+1/2^n <1 成立
n+1時
按常規一般證明
1/2+1/4+1/8+…+1/2^n+1/2^(n+1) 
前面<1, 加個1/2^(n+1)很難說還<1
沒法證
換個思路
1/2+1/4+1/8+…+1/2^n +1/2^(n+1) 
= 1/2+(1/4+1/8+…+1/2^n +1/2^(n+1) )
= 1/2+1/2 (1/2+1/4+1/8+…+1/2^n )
< 1/2+1/2=1
成立
原命題得證

 

6. 歐拉公式

圖論

面,圖中邊所圍的封閉區域,整個外面也算一個面

證明:任意一連通圖,節點數V, 邊數E, 面數F, 滿足 V + F = E + 2

對面數進行歸納

圖只有一個面時,也就是圖中沒有閉環,若有閉環,則必然有兩個面了就

考察樹

樹V = E + 1 公式成立

三角形,節點3, 面2, 邊3,成立

假設面數爲n時 V + F = E + 2 成立

面數n+1時

在連通圖裏面必然可以找到一個面與外邊的區域相鄰

刪去相鄰的邊

面數 - 1

邊數 - 1

剩下不變

根據假設,公式成立

則n+1時公式兩邊都+1,公式成立

命題成立

7. 有路可達

獨立集,節點集合,任一兩節點不相鄰

有向圖 <a, b>  表示a與b相鄰,b與a不相鄰

證明:G(V, E)有向圖,證明G中有一個獨立集S(G),使G中每一個節點都能由S(G)中的點通過長度不超過2的路到達

n <= 3 時, 必然成立

假設節點數<n的有向圖,命題成立

對於節點數爲n的有向圖

取一個點v

N(v)爲所有與v相鄰的點的集合 {w | <v, w> 在G中}

則對於圖H = G - v - N(v)

根據假設有S(H)能滿足命題要求

  1. 若S(G) = S(H) + {v} 是獨立集,v又與所有N(v)一步到,則這個圖中所有點都可由S(G) 兩步內到
  2. 若S(H) + {v} 不是獨立集,意味着S(H)中必然有一個p,存在邊<p, v>,這樣p可以經過兩步到所有N(v), 從而S(G) = S(H), 滿足要求

命題成立

8. 格雷碼

問題:產生n位元的所有格雷碼。

格雷碼(Gray Code)是一個數列集合,每個數使用二進位來表示,假設使用n位元來表示每個數字,任兩個數之間只有一個位元值不同。

例如以下爲3位元的格雷碼: 000 001 011 010 110 111 101 100 。

如果要產生n位元的格雷碼,那麼格雷碼的個數爲2^n.

假設原始的值從0開始,格雷碼產生的規律是:第一步,改變最右邊的位元值;第二步,改變右起第一個爲1的位元的左邊位元;第三步,第四步重複第一步和第二步,直到所有的格雷碼產生完畢(換句話說,已經走了(2^n) - 1 步)。

用一個例子來說明:

假設產生3位元的格雷碼,原始值位 000

第一步:改變最右邊的位元值: 001

第二步:改變右起第一個爲1的位元的左邊位元: 011

第三步:改變最右邊的位元值: 010

第四步:改變右起第一個爲1的位元的左邊位元: 110

第五步:改變最右邊的位元值: 111

第六步:改變右起第一個爲1的位元的左邊位元: 101

第七步:改變最右邊的位元值: 100

 

如果按照這個規則來生成格雷碼,是沒有問題的,但是這樣做太複雜了。如果仔細觀察格雷碼的結構,我們會有以下發現:

1、除了最高位(左邊第一位),格雷碼的位元完全上下對稱(看下面列表)。比如第一個格雷碼與最後一個格雷碼對稱(除了第一位),第二個格雷碼與倒數第二個對稱,以此類推。

2、最小的重複單元是 0 , 1。

000

001

011

010

110

111

101

100

所以,在實現的時候,我們完全可以利用遞歸,在每一層前面加上0或者1,然後就可以列出所有的格雷碼。

比如:

第一步:產生 0, 1 兩個字符串。

第二步:在第一步的基礎上,每一個字符串都加上0和1,但是每次只能加一個,所以得做兩次。這樣就變成了 00,01,11,10 (注意對稱)。

第三步:在第二步的基礎上,再給每個字符串都加上0和1,同樣,每次只能加一個,這樣就變成了 000,001,011,010,110,111,101,100。

好了,這樣就把3位元格雷碼生成好了。

如果要生成4位元格雷碼,我們只需要在3位元格雷碼上再加一層0,1就可以了: 0000,0001,0011,0010,0110,0111,0101,0100,1100,1101,1110,1010,0111,1001,1000.

也就是說,n位元格雷碼是基於n-1位元格雷碼產生的。

9. 無重邊的路

節點的度數之和 = 邊的兩倍
證明:G(V,E)無向連通圖, O爲度數爲奇的節點的集合,一定爲偶數。證明O可以分出兩兩組成的節點對,對每一對節點都能找到連接他們的與其他路勁無重邊的路徑。

 

邊數m = 1, 顯然成立

假設邊數<m的連通的無向圖滿足命題

對於邊數m的圖

找到O中兩個點,必然有一條路

刪去這條路,只刪邊,不刪點

原來奇點刪路(兩條邊)後必然度還是奇數

剩下的點還在O中,必然邊數<m,可以歸納假設

但無法保證剩下的還聯通

增強歸納假設

假設邊數<m的無向圖(不需要條件連通)滿足命題

這樣刪掉那條路之後

可以分成多個連通的子圖

對於每個子圖,邊數<m,滿足假設

這樣在加上原來那條路

邊數m的圖成立

命題成立

常見錯誤

1. 由於常常要證明的東西是普遍認可的,是熟悉的,所以在證明的時候會偶爾忽略一些條件。如上面的無重邊的路問題,很容易忽略刪去這條路後原圖是否還連通的判斷,引發錯誤。

2. 基礎假設需要注意題目的條件,有些會有特殊情況,比如有些n = 1, n = 2 都是對的,n -1 也可以推n的情況,我們會按照數學歸納法判斷其正確。但就是特殊情況使得 n = 2 推不了n = 3, 那麼整個歸納就錯了。

總結

數學歸納法的思想主要就是兩種:

1. 知道基礎解,然後可以由n的情況推n + 1。

2.知道基礎解,知道n+1的情況,並能證明n+1的情況可以由n的情況推出。

計算機科學與數學密切相關,其中的遞歸便是用的數學歸納法的思想。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章