本人屯了幾本算法書,打算儘快在大三結束之前汲取完。所以將其中一些有趣的地方記錄下來吧,畢竟算法還是很有趣的,雖然學習的過程中常常伴隨着痛苦
《信息學奧賽一本通》
五種常見的遞推關係
1.Fibonacci數列
斐波那鍥數列是形如這樣的數列:1、1、2、3、5、8、13、21、34、55、89,在數學上,斐波納契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
如比較著名的兔子問題和上臺階問題 都是斐波那鍥數列的應用。想了解更多可以看這裏。
2.Hanoi塔問題
問題的提出:Hanoi塔由n個大小不同的圓盤和三根木柱a,b,c組成。開始時,這n個圓盤由大到小依次套在a柱上,如圖3-11所示。
要求把a柱上n個圓盤按下述規則移到c柱上:
(1)一次只能移一個圓盤;
(2)圓盤只能在三個柱上存放;
(3)在移動過程中,不允許大盤壓小盤。
問將這n個盤子從a柱移動到c柱上,總計需要移動多少個盤次?
解:設爲n個盤子從a柱移到c柱所需移動的盤次。顯然,當n=1時,只需把a 柱上的盤子直接移動到c柱就可以了,故=1。當n=2時,先將a柱上面的小盤子移動到b柱上去;然後將大盤子從a柱移到c 柱;最後,將b柱上的小盤子移到c柱上,共記3個盤次,故=3。以此類推,當a柱上有n個盤子時,總是先借助c柱把上面的n-1個盤子移動到b柱上,然後把a柱最下面的盤子移動到c柱上;再借助a柱把b柱上的n-1個盤子移動到c柱上;總共移動+1+個盤次。
∴ 邊界條件:
3.平面分割問題
問題的提出:設有n條封閉曲線畫在平面上,而任何兩條封閉曲線恰好相交於兩點,且任何三條封閉曲線不相交於同一點,問這些封閉曲線把平面分割成的區域個數。
解:設an爲n條封閉曲線把平面分割成的區域個數。 由圖3-13可以看出:a2-a1=2;a3-a2=4;a4-a3=6。
從這些式子中可以看出。當然,上面的式子只是我們通過觀察4幅圖後得出的結論,它的正確性尚不能保證。下面不妨讓我們來試着證明一下。當平面上已有n-1條曲線將平面分割成個區域後,第n-1條曲線每與曲線相交一次,就會增加一個區域,因爲平面上已有了n-1條封閉曲線,且第n條曲線與已有的每一條閉曲線恰好相交於兩點,且不會與任兩條曲線交於同一點,故平面上一共增加2(n-1)個區域,加上已有的個區域,一共有個區域。
所以本題的遞推關係是,邊界條件是
4.Catalan數
Catalan數首先是由Euler在精確計算對凸n邊形的不同的對角三角形剖分的個數問題時得到的,它經常出現在組合計數問題中。
問題的提出:在一個凸n邊形中,通過不相交於n邊形內部的對角線,把n邊形拆分成若干三角形,不同的拆分數目用表示,即爲Catalan數。例如五邊形有如下五種拆分方案(圖3-14),故。求對於一個任意的凸n邊形相應的。
Catalan數是比較複雜的遞推關係,尤其在競賽的時候,選手很難在較短的時間裏建立起正確的遞推關係。當然,Catalan數類的問題也可以用搜索的方法來完成,但是,搜索的方法與利用遞推關係的方法比較起來,不僅效率低,編程複雜度也陡然提高。
5、第二類Stirling數
在五類典型的遞推關係中,第二類Stirling是最不爲大家所熟悉的。也正因爲如此,我們有必要先解釋一下什麼是第二類Strling數
【定義2】 n個有區別的球放到m個相同的盒子中,要求無一空盒,其不同的方案數用表示,稱爲第二類Stirling數。
下面就讓我們根據定義來推導帶兩個參數的遞推關係——第二類Stirling數。
解:設有n個不同的球,分別用表示。從中取出一個球,的放法有以下兩種:
①獨自佔一個盒子;那麼剩下的球只能放在m-1個盒子中,方案數爲;
②與別的球共佔一個盒子;那麼可以事先將這n-1個球放入m個盒子中,然後再將球可以放入其中一個盒子中,方案數爲。
綜合以上兩種情況,可以得出第二類Stirling數定理:
邊界條件可以由定義2推導出:
第二類Stirling數在競賽中較少出現,但在競賽中也有一些題目與其類似,甚至更爲複雜。讀者不妨自己來試着建立其中的遞推關係。
小結:通過上面對五種典型的遞推關係建立過程的探討,可知對待遞推類的題目,要具體情況具體分析,通過找到某狀態與其前面狀態的聯繫,建立相應的遞推關係。