接上文:http://blog.csdn.net/jj12345jj198999/article/details/6616151
加強歸納假設【標題2】
在用歸納法證明數學定理時,加強歸納假設被當做一種很重要的技巧使用。當嘗試使用一個歸納證明時常常會遇到下面的情況。定理用P(n)表示,歸納假設可以用P(n-1)表示,要證明結論P(n-1)推匯出P(n)。很多情況下可以加上另一個假設,稱為Q,在這個假設下證明會變得更簡單。也就是說,證明P(n-1)和Q推匯出P(n)要更加容易。這種結合的假設看上去是正確的但是還不清楚如何去證明。技巧在於在歸納假設中加上Q(如果可能的話)。現在需要證明[P和Q](n-1)推匯出[P和Q](n)。結合的定理[P和Q]和僅有P相比是一個更強的定理,但是有時候更強的定理卻更容易去證明(Polya稱這個原理為“發明家的悖論”)。這個過程可以反覆,加上正確補充的假設,定理的證明變得簡單。我們在運算式計算和線段包含問題中已經初步看到了這個原理。
在這部分中我們給出兩個例子來展現加強歸納假設的運用。第一個問題很簡單,但它闡明了使用這種技巧時最常見的錯誤,也就是忽視了加入額外假設這個事實從而忘記更新證明過程。換句話說,證明P(n-1)和Q推匯出P(n)時沒有注意到Q是被假設的。我們可以把這種轉換類比與解決更小的問題,不過該問題和原先的問題已經不是完全一樣的了。第二個例子更複雜一些。
假設T是一個以r為根的二叉樹。節點v的高度就是v和樹中最底層的葉子之間的距離(應該是節點下方的樹的最底層葉子)。節點v的平衡因子被定義為節點v的左孩子和它的右孩子(我們假設一個節點的孩子被標記為左和右)高度之差。圖3給出了一棵樹,在樹中每個節點用h/b來標記,h是節點的高度,b是節點的平衡因子。
圖3:一個由高度和平衡因子標記的二叉樹
問題:給出一個擁有n個節點的樹,計算它所有節點的平衡因子。
我們使用基本的歸納演算法以及直截了當的歸納假設:
歸納假設:我們已經知道如何去計算小於n個節點的平衡因子。
最基本的n=1的例子很簡單。給定一個擁有n>1節點的二叉樹,我們移去根節點,然後用遞迴的方法解決剩下的子樹。我們選擇移去根節點因為一個節點的平衡因子僅僅依賴於節點下面的節點。我們現在已經知道出了根節點以外其他所有節點的平衡因子。但是根節點的平衡因子不是依賴於它的孩子的平衡因子而是依賴於它的孩子的高度。因此,一個簡單的歸納法無法適用於這個例子。我們需要知道根節點孩子的高度。思想就在於在原先的問題中加上高度查詢這個問題。
加強的歸納假設:我們已經知道如何計算小於n個節點的平衡因子以及它們的高度。
再一次的,基本問題很簡單。現在考慮根節點時可以簡單通過比較它的孩子的高度確定出它的平衡因子。此外,根節點的高度也能夠被簡單確定,也就是它兩個孩子高度的最大值加上1。
這個演算法的關鍵也就是解決一個簡單拓展的問題。我們也計算高度而不只是計算平衡因子。拓展後的問題要更簡單因為高度是很容易計算出來的。在很多情況下,解決一個更強的問題反而更簡單。這對于歸納法說尤其正確。使用歸納法,我們僅需要把一個小問題拓展成一個更大的問題。如果解法更寬泛(因為問題被拓展了)那麼歸納步驟可能要更簡單因為我們有更多的東西可用。在該問題中常見的一個錯誤是忘記其中有兩個不同的變數,而且這兩個變數必須要單獨計算。