<<具體數學>>1.2遞歸(二)

開頭:今天剛考完試,還有就是下雨就不太想出去了,長春也有點冷,咱們接着上次寫的繼續寫,我也把這個發在其餘博客上了,感受o(╯□╰)o,沒人看啊,哈哈,自嘲結束,今天寫遞歸的下一節平面中的直線(Lines in the Plane)
1.2平面中的直線(Lines in the Plane) 算法

不黑不吹,這本書沒一節的故事也是很吸引人的:一我的用刀在乎大利餡餅上作n次直線切割,能把餡餅切成多少份?或者,較正式地說:由平面中n條直線肯定的最大區域數Ln是多少?瑞士數學家Jacob Steiner在1826年首先予以解決(圖論、算法中的Steiner樹以其名字命名,該問題是NPC的) 函數

套路來了,其實就是老的套路: spa

(1)n=0:L0=1 orm

(2)n=1:L1=2 遞歸

(3)n=2:L2=4 博客

 

記住從最小的開始,沒有直線的平面具備1個區域;有1條直線的平面具備2個區域;有2條直線的平面有4個區域;但當咱們加入第3條直線,咱們當即發現,無論如何放前2條直線,它至多能切3個老區域; 數學

 

所以L3=4+3=7是咱們能夠獲得的結果. 擴展

冷靜一下.....仔細想一想....... im

直覺上來看,直線對區域的剖分,表現爲在區域中加上了1條分界線,也正是區域邊界與直線相交造成的一段 總結

若是將直線劃分紅不一樣的段(閉區段和開區段都算),則每一個段剖分1個區域,每剖分1個區域,新增長1個區域。

所以,新增長的區域數應該等於新直線被劃分的段數!!!

每條直線至多相交一次,所以新直線最多與原來的n - 1直線相交– 1次,造成n個段(注意兩端開放的段)

倒着反推再反推,新直線最多剖分出來n個新的區域!!!

因此咱們能夠獲得

Ln ≤ Ln-1 + n

和上篇的漢諾塔同樣,是時候拿出數學概括法了,易證咱們能達到此公式中的等式,咱們只要使第n條直線不和其餘任何直線平行(所以它和其餘任何直線相交),且使它不經過任何存在的交點(它和其餘任何直線交於不一樣位置),因此遞歸式爲

L0=1;

Ln=Ln-1+n(n>0)

下面來解這個遞歸式:

Ln=Ln-1+n;

  =Ln-2+(n-1)+n

  =L0+1+2+....+(n-2)+(n-1)+n

  =1+Sn

其中Sn=1+2+3+...+(n-1)+n

 

 

這些值也稱爲三角數,由於Snn行三角形陣中球狀針孔個數.例如,一般4行陣    *  *  *  *

                                                                       *  *  *

                                                                         *  *

                                                                           *

S4=10個針孔

小學其實咱們就會算Sn的和,因此Ln=n*(n+1)/2+1(n>=0)

要進行嚴格的數學概括證實,關鍵概括步是Ln=Ln-1+n=1/2n(n+1)+1

關於書上講的閉形式:對一個量f (n)的表達式而言,若是可以最多用固定次數(這次數獨立於)的「經常使用」標準運算來算出結果,則稱其爲封閉形式的。So,

1、遞歸方程不是封閉形式,由於求解次數依賴於n

2、咱們獲得的TnLn的結果是封閉形式的:

Tn 1exp1次—

Ln 2+1次× ,1次÷

31 + 2 + … + n之類的和不是封閉的(用…省略了中間的加法計算,其次數與n有關)

4n(n1)/2等表達式是封閉的( 1+1次×,1次÷)

5n!是否是呢?

關於n!等封閉形式的例外情形:

簡單閉形式的總數是有限的,而一些經常使用、重要的遞歸方程並無簡單閉形式

爲了更好地表達數學運算結果,咱們就增長了一些「經常使用」的標準運算,以擴展封閉形式的範圍。例如階乘n! (儘管它的等價形式1·2·…·n並非封閉的),也就是說計算階乘被視爲1次運算。

平面中的直線—變形

下面考慮Lines in Plane問題的變形:假設用彎曲線代替直線,並且每條彎曲線都含有一個「銳角的鋸齒形轉角」,那麼平面中n條彎曲線圍成的區域最多有多少呢?

先來觀察一下n = 1和n = 2的情形:

 

 

容易看出:每加入1條彎曲線,就像加入了2條直線,只是這「兩條」直線在交點處沒有延伸,所以致使了區域234的合併(31):

 

每加入1條新彎曲線,在新增長區域的數量中都要至少減去2。同時,若是把拐點地放到一個開區域,使得隱去的直線不會與原來的直線相交,咱們只會減小2個區域

也就是說,新彎曲線增長的區域數爲2n – (先像2條直線同樣考慮區域的剖分,獲得2n,再考慮區域的合併,獲得-2

Zn = Zn-1 + 2n - 2

或者,先統一地像2n條直線同樣考慮區域的剖分,獲得L2n;再考慮區域的合併,獲得-2n,因此

Zn = L2n – 2n

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

= 2n2 – n + 1

LnZn的封閉形式進行比較,咱們發現對於大的n,有下面的關係,

所以,彎曲線狀況獲得的區域數目大概是直線狀況的4倍。(第9章會討論如何分析整函數的近似狀態,符號‘~’的定義可見9.1節,其實學太高數的應該知道這什麼。。。。)

總結:其實這小節不是很難的,下一節就有點難了,我但願我能堅持寫下去,也能堅持把書看完,雖然很吃力,但我更想看高老頭的TAOCP,應該算是神做了,號稱計算機中的聖經啊,昨天母親節,謝謝個人母親。。你們也應該多去關心一下家人,加油,我但願我每星期都能寫那麼一點點。。。

相關文章
相關標籤/搜索