目錄:
數學歸納法介紹
數學歸納法是一種強有力的證明工具。數學歸納法是用來證明定理的工具,但是卻不能發現定理。也就是說數學歸納法是一種證明手段。
數學歸納法高中我們也曾學習過,那個時候學習的是不完全歸納法。在離散數學中,我們會學習三種數學歸納法:
- 不完全歸納法(即高中說明的歸納法)
- 強歸納法
- 結構歸納法
這里還會有一些關於遞歸的知識以及數學歸納法的一些有趣的應用。
本章的參考書籍是《離散數學及其應用》。
不完全歸納法
首先來看看我們都熟悉的不完全歸納法,一般我們就稱其為數學歸納法。
關於不完全歸納法,雖然名字有“不完全”三個字,但是這種歸納法恰恰不是不完全的。這種命名只是出於無奈:因為強歸納法也被稱為完全歸納法,所以這里的歸納法就被稱為不完全歸納法了😊。
對於不完全歸納法,大多書上都是以多米諾骨牌來說明的。我們這里使用爬梯子的方式來說明一下:
對於有n節的梯子,我們想要從第一節爬到第n節,可以使用如下的方法:
- 可以爬到第一節
- 如果可以爬到第k節,那么我們可以爬到第k+1節
現在我們先假設以上兩句都成立,這樣可以使用遞歸的方式來爬到第n節樓梯:首先可以爬到第1節樓梯,然后令k=1,由第二句可知我們可以爬到第2節,再令k=2,則可以爬到第3節。以此類推就可以爬到第n節了。
不完全歸納法定義:
以上兩個爬樓梯的步驟其實就是使用數學歸納法描述的。不完全歸納法的定義如下:
為了證明對所有的正整數n,P(n)為真,其中P(n)為一個命題函數,需要完成兩個步驟的證明:
基礎步驟:證明P(1)為真
歸納步驟:證明對每個整數k來說,蘊含式P(k)→P(K+1)成立。其中P(k)為歸納假設。
這個定義想必大家都很熟悉啦,就是將高中的歸納法定義用離散的語言敘述了一下唄。
對於上面的樓梯問題來說,P(n)就是“能夠爬到第n節樓梯”。那么首先證明能夠爬到第一節樓梯,即P(1),然后證明在可以達到P(k)的情況下,可以達到P(k+1)節階梯。完成以上兩個證明就可以達到任意節樓梯啦。
上面的例子是個抽象的生活實例,下面我們給出一些數學上使用不完全歸納法的證明題目:
不完全歸納法實例:
對於求和公式的證明:
不完全歸納的一個用途廣泛的地方就是在對求和公式的證明。不過需要注意的是,由於數學歸納法只能用來證明,而不是用來發現定理的,所以想要通過數學歸納法來獲得公式是不可能的。只能證明現有公式的正確性。
例1:證明求和公式1+2+3+...+n=n(n+1)/2是正確的
證明:

首先命題函數P(n)是“1+2+3+...+n=n(n+1)/2”,那么首先是基礎步驟: 基礎步驟:證明P(1)為真 由於P(1)為1=1*(1+1)/2=1,等式左右兩邊相等,命題得證。 歸納步驟:證明在P(k)成立的時候,P(k+1)為真 P(k)為:1+2+3+...+k=k(k+1)/2 P(k+1)為:1+2+3+..+k+1=(k+1)(k+2)/2 這里需要想辦法將P(k)變成P(k+1),很簡單,在P(k)左右兩邊加上k+1即可,那么就是: P(k)+k+1=k(k+1)/2+k+1=(k+1)(k+2)/2=P(k+1) 由於P(k)變成P(k+1)之后右式等於P(k+1)的右式。又由於P(k)是真的,所以P(k+1)為真,命題得證。
證明求和公式的題目還有很多,這里先列舉一個,其他的題目和這個差不多,只是可能會多一些技巧。
對於不等式的證明:
例2:證明n<2^n對所有正整數成立

P(n)為"n<2^n對所有正整數成立" 基礎步驟:P(1)為1<2^1=2成立 歸納步驟:P(k)為k<2^k;P(k+1)為 k+1<2^(k+1) 將P(k)轉化為P(k+1),兩邊加上1,則 P(k)+1為k+1<2^k+1 又由於2^k+1<2(k+1) 所以k+1<2^k+1<2^(k+1) 即k+1<2^(k+1)成立,P(k+1)成立,命題得證。
對於整除問題的證明:
這種整除問題高中也是難倒了我一段時間啊,這里我們來看看這種題怎么解吧。
例3:當n為整數時,證明n^3-n可被3整除

基礎步驟:P(1)為1^3-1=0可以被3整除 歸納步驟:P(k)為k^3-k,P(k+1)為(k+1)^3-(k+1) 展開(k+1)^3-(k+1)得k^3+3k^2+3k+1-k-1=(k^3-k)+3*(k^2+k) 可知這個式子能被3整除,證畢。
歸納法的奇特應用:
數學歸納法有時候可以在一些意想不到的場合使用,來看看下面的問題:
例4:使用右三聯骨牌可以覆蓋一個2^n × 2^n棋盤並且讓棋盤只留下一個空格
這個就是右三聯骨牌,進行旋轉的話還可以得到另外三種:
那么首先來證明P(1)的情況
基礎步驟:當k=1的時候,棋盤為2 × 2的,那么只需要上面任何一個骨牌就可以覆蓋,命題的證。
歸納步驟:在2^k × 2^k的棋盤下滿足條件,那么2^(k+1) × 2^(k+1)也可以滿足條件
我們將整個棋盤分為四份:
由P(k)知,右下角的子棋盤一定可以使用骨牌的只剩下一個空格:
接下來我們這樣放上一個骨牌:
這樣的話剩下的三個棋盤中多出的空格就被填滿了,這樣由P(k)知可以全部填滿。所以最后整個棋盤只會剩下有下家一塊空格,命題得證。
強歸納法(完全歸納法)
有些時候使用不完全歸納法不容易證明一些命題,這個時候我們可以考慮強歸納法來證明。
強歸納法的定義:
要證明對於所有的正整數n而言,都有P(n)為真,其中P(n)為命題函數,我們需要證明以下兩個步驟:
基礎步驟:
P(1)成立
歸納步驟:
對於所有的正整數 n來說,蘊含式[P(1)∧P(2)∧P(3)∧...∧P(k)]→P(k+1)成立。其中P(1)∧P(2)∧P(3)∧...∧P(k)為歸納假設。
注意到強歸納法和不完全歸納法只在歸納步驟上有區別。不完全歸納法是從P(k)推導到P(k+1)。而強歸納法則是從前P(k)個條件推導到P(k+1)個條件。
有些時候強歸納法畢不完全歸納法更好用。所以我們使用歸納法的順序是先想到強歸納法,再想到不完全歸納法。
強歸納法的一些實例:
例1:證明若n是大於1的整數,則n可以寫成素數之積

基本步驟: 對於2來說,顯然其本身就是素數 歸納步驟: 如果k+1是素數,那么顯然其本身就是素數,命題成立。 如果k+1是合數,那么一定存在i,j滿足2<=i<=j<k+1且k+1=i*j。因為i,j都小於等於k,所以由P(k)的正確性知道i,j都可以寫成素數之積。那么k+1可以寫成素數之積,那么P(k+1)成立
也可以使用強歸納法來證明一些生活中的問題
例2:考慮一個取火柴的游戲,其中兩名選手輪流從兩堆火柴中的一對取出任意數目整數的火柴,取走最后一根火柴的人獲勝。求證:當每堆開始有n根火柴的時候,后手一定會贏。
這個題目的意思就是說,有兩堆數量一樣的火柴,有兩名選手從其中取火柴,但是一次只能在一個火柴堆中取。最后將所有火柴都取走的人獲勝。要求證明第二步走的人一定會獲勝。

基礎步驟: 當n=1的時候,先手只有一種選擇:從兩個火柴堆里面選一個拿完(因為每個火柴堆只有一根火柴)。這個時候后手就可以將另外一根火柴拿走了。命題得證。 歸納步驟: 首先歸納假設是當一堆火柴有i個火柴(1<=i<=k)的時候命題得證。現在需要證明每堆有k+1根火柴的時候命題的證。這個時候假如先手拿了r根火柴,后手可以在另外一堆例同樣拿r根火柴。這樣兩堆的火柴數就是k+1-r(1<=k+1-r<=k),這個時候條件就變成了歸納假設的條件。由歸納假設可知命題為真。
遞歸定義和結構歸納法
所謂遞歸定義,相信每個學計算機的都知道,就是在定義自己的時候在自己的定義里面再次使用自己的定義。
遞歸定義函數:
基礎步驟:規定這個函數在0處的值
遞歸步驟:給出從較小值求出當前值的規則
在數學里面其實就是復合函數啦。最最有名的遞歸定義函數就是裴波那契數列啦:
裴波那契數f0,f1,f2...是用方程組f0=0,f1=1,fn=fn-1+fn-2來遞歸定義的函數。
遞歸定義結構和集合:
像是遞歸定義函數一樣,遞歸定義集合和結構也是有基礎步驟和遞歸步驟的。看看下面三個遞歸定義:
定義1:
考慮如下定義的整數集合的子集S:
基礎步驟:3∈S
遞歸步驟:若x∈S且y∈S,那么x+y∈S
這個遞歸定義定義了一個數集,其中包括3,6,9,12等等數。
定義2:
字母表A上的字符串集合A'遞歸的定義成:
基礎步驟:空串λ∈A'
遞歸步驟:如果ω∈A'且x∈A,那么ωx∈A。這里ωx為字符串的連接,指將x串連接在ω串后面。
這里遞歸的定義了字符串。
在數據結構中有很多遞歸的定義,包括鏈表的結構體定義,二叉樹的結構體定義和圖的鄰接表定義。可以看出遞歸定義在計算機中還是有重要的地位的。
結構歸納法的定義:
結構歸納法是專門用於證明遞歸結構定義的一種歸納法:
基礎步驟:證明對於遞歸定義的基礎步驟所規定的屬於該集合的所有元素來說,結果成立
歸納步驟:證明如果對於定義的遞歸步驟中用來構造新元素的每個元素來說命題為真,那么對於這些新元素來說結果成立。
結構歸納法的例子:
這里舉個例子來說明結構歸納法如何證明:
首先來看一下關於滿二叉樹的一些遞歸定義:
滿二叉樹:
基礎步驟:存在一個只有單個定點的滿二叉樹
歸納步驟:如果T1,T2都是滿二叉樹,則存在一個表示為T1 • T2的滿二叉樹,它包含樹根r和連接從r到左子樹T1和右子樹T2的邊
滿二叉樹高度h(T):
基礎步驟:只含有樹根r的滿二叉樹T的高度是h(T)=0
歸納步驟:如果T1,T2都是滿二叉樹,則滿二叉樹T=T1 • T2有高度h(T)=1+max(h(T1),h(T2))
定義滿二叉樹節點數目n(T):
基礎步驟:只含有樹根r的滿二叉樹T的高度h(T)=0
遞歸步驟:如果T1,T2都是滿二叉樹,則滿二叉樹T1 • T2的節點數是n(T)=1+n(T1)+n(T2)
例1:
如果T為滿二叉樹,那么證明n(T)<=2^[h(T)+1]-1

基礎步驟:當T只有樹根時,n(T)=1<=2^(0+1)-1=1成立 歸納步驟:對於歸納假設,當T1和T2都是滿二叉樹的時候,n(T1)<=2^[h(T1)+1]-1且n(T2)<=2^[h(T2)+1]-1成立。根據n(T)和h(T)的遞歸公式知道n(T)=1+n(T1)+n(T2),h(T)=1+max(h(T1),h(T2))。帶入公式知道: n(T)=1+n(T1)+n(T2) <=1+(2^[h(T1)+1]-1)+(2^[h(T2)+1]-1) <=2*max(2^[h(T1)+1]-1,2^[h(T2)+1]-1) -1 <=2*2^max(2^[h(T1)+1]-1,2^[h(T2)+1]-1) -1 =2^[h(T)+1] -1 命題成立