歸納法:算法證明與動(dòng)態(tài)編程思想

? ? ? ?本人最近在讀TAOCP,雖感叢書(shū)內(nèi)容浩繁捶惜,難以在有限時(shí)間內(nèi)研讀死讹,但亦收獲頗豐。本文是在讀過(guò)“1.2.1 數(shù)學(xué)歸納法”(后文的“本篇”均指TAOCP 1.2.1)之后的思考胡诗,也包含本篇的關(guān)鍵內(nèi)容子刮,以供復(fù)習(xí)參考。

數(shù)學(xué)歸納法與廣義歸納法

? ? ? ?本篇是從數(shù)學(xué)歸納法開(kāi)始的悯蝉。稍有數(shù)學(xué)基礎(chǔ)的人都明白數(shù)學(xué)歸納法的內(nèi)容:

假定需要證明P(n)對(duì)所有正整數(shù)n為真归形,那么可以:

(1) 證明P(1)為真
(2) 證明“如果P(1),P(2),......,P(n)全部為真,那么P(n+1)也為真”鼻由,這個(gè)證明應(yīng)對(duì)任何正整數(shù)成立

? ? ? ?很容易看出暇榴,使用數(shù)學(xué)歸納法證明可以看成是一個(gè)輸出“P(n)為真”的程序/算法:

E1: k<-1,輸出P(1)的證明
E2: 如果k=n蕉世,那么結(jié)果已經(jīng)輸出
E3: 輸出“因?yàn)橐呀?jīng)證明了P(1),P(2),......,P(k)蔼紧,所以P(k+1)為真”
E4: k<-k+1,跳轉(zhuǎn)到E2

? ? ? ?那么我們?yōu)槭裁纯梢允褂眠@樣的歸納思想與歸納法呢狠轻?雖然上面的算法看起來(lái)已經(jīng)很簡(jiǎn)明奸例、正確,但是顯然數(shù)學(xué)歸納法涉及到了無(wú)窮的概念,我們是否需要證明數(shù)學(xué)歸納法的正確性呢查吊?實(shí)際上數(shù)學(xué)歸納法的思想是將P(n)的正確性與正整數(shù)n的定義綁定谐区,而正整數(shù)的定義天生就是歸納的,我們認(rèn)為正整數(shù)的歸納定義是一種公理化的定義逻卖,無(wú)需證明宋列,因此證明方式與正整數(shù)定義如出一轍的數(shù)學(xué)歸納法也無(wú)需證明。
? ? ? ?在證明一些難以表示為P(n)這樣僅與一個(gè)正整數(shù)變量有關(guān)评也,而至少要表示成P(p,q)這樣含有多個(gè)正整數(shù)變量的命題時(shí)炼杖,上面的數(shù)學(xué)歸納法就顯得力不從心。有的方法會(huì)曲線救國(guó):先證明P(1,1)盗迟,再證明“P(1,1),P(2,1),......,P(p,1)為真可證明P(p+1,1)”與“P(p,1),P(p,2),......,P(p,q)為真可以證明P(p,q+1)”這兩條命題坤邪,分兩步得出結(jié)果。這不失為一個(gè)解決方案罚缕,但它沒(méi)有摸到歸納法的精髓罩扇。
? ? ? ?雖然數(shù)學(xué)歸納法作為一種古老的方法,依賴的是正整數(shù)的公理化歸納定義怕磨,但由它發(fā)展而來(lái)的廣義歸納法則是使用了集合與關(guān)系的理論,不僅能支持證明P(p,q),P(p,q,s)這樣的與正整數(shù)有關(guān)的命題消约,還擴(kuò)充了命題自變量的范圍肠鲫。
通過(guò)思考數(shù)學(xué)歸納法,我們可以樸素地將其思想總結(jié)為這樣:

如果我們能夠:
(1) 證明:“最開(kāi)始”的命題或粮;
(2) 證明:如果“所有排在前面”的命題都已經(jīng)被證明导饲,可以通過(guò)這些命題證明本命題。
那么就能證明這個(gè)命題“序列”里的任意一個(gè)命題氯材。

? ? ? ?經(jīng)過(guò)總結(jié)渣锦,我們可以提出在任意集合上的“良序”關(guān)系,借助這個(gè)關(guān)系氢哮,達(dá)到歸納證明的目的袋毙,不管集合的元素是不是同一類、是不是可數(shù)冗尤。

集合S上的良序關(guān)系@具備以下性質(zhì):
(i) 傳遞性
(ii) 任意S上的x听盖、y,三種可能性:x@y裂七,y@x皆看,x=y恰有一種成立
(iii) 對(duì)S的任意非空子集A,A上存在元素x背零,使得A的任意元素y腰吟,都有x@y或x=y

? ? ? ?廣義歸納法推廣歸納法,在上面良序關(guān)系的基礎(chǔ)上說(shuō)明了:如果在P(y)對(duì)于所有x@y均為真的假定下能夠證明P(x)徙瓶,那么P(x)對(duì)S中的所有x為真毛雇。

? ? ? ?對(duì)于從良序關(guān)系的定義嫉称,我們可以看到一點(diǎn)“樸素”的歸納法思想:(i)與(ii)保障了集合元素上有全序,我們可以構(gòu)建“所有排在前面的命題”的列表用于證明當(dāng)前命題禾乘;(iii)保障了“最開(kāi)始的命題”的存在澎埠。顯然,正整數(shù)集上的“小于”關(guān)系就是良序關(guān)系始藕。類似地蒲稳,如果我們能夠?qū)ψ址蟂定義一個(gè)良序關(guān)系,那么就可以對(duì)等長(zhǎng)字符串集合T<sub>n</sub>(包含所有用來(lái)自S的字符構(gòu)成的長(zhǎng)為n的字符串)也定義一個(gè)良序:如果存在k (1 <= k <= n)使xj=yj對(duì)于1 <= j < k 恒成立,而xky<sub>k</sub>伍派,那么在T<sub>n</sub>上(x<sub>1</sub>,x<sub>2</sub>,...,<sub>n</sub>)(y1,y2,...,yn).

歸納法成果:算法正確性證明

? ? ? ?許多算法包括分支江耀、循環(huán)結(jié)構(gòu),應(yīng)該如何使用有限的證明篇幅說(shuō)明可能執(zhí)行任意次分支诉植、循環(huán)的算法的正確性呢祥国?再?gòu)?fù)雜的算法也可以用流程圖表示它的有限個(gè)分支、循環(huán)步驟晾腔,利用廣義歸納法舌稀,我們可以找出每一個(gè)步驟之前的前提/斷言/不變量,然后證明經(jīng)過(guò)這個(gè)步驟之后灼擂,后續(xù)步驟的前提/斷言/不變量是正確的壁查。這要求在流程圖中:

如果指向某方框的至少一個(gè)箭頭上的斷言在執(zhí)行方框內(nèi)操作之前為真,那么離開(kāi)該方框的相關(guān)箭頭上的所有斷言在執(zhí)行方框內(nèi)操作之后都為真剔应。

? ? ? ?這樣一來(lái)睡腿,我們就可以用歸納的方法,說(shuō)明在算法每一個(gè)步驟(方框)前的斷言都為真峻贮,也就包括“算法終止”的步驟席怪,保證了算法終止時(shí)結(jié)論的正確性。

歸納思想成果:動(dòng)態(tài)編程

? ? ? ?動(dòng)態(tài)編程思想主要是:存儲(chǔ)可重用的中間計(jì)算結(jié)果纤控;使用較小規(guī)模的計(jì)算問(wèn)題答案擴(kuò)展到較大規(guī)模的問(wèn)題計(jì)算挂捻。這便應(yīng)用了歸納思想。在經(jīng)典的“曼哈頓地圖路徑”問(wèn)題中嚼黔,動(dòng)態(tài)編程將輸入慢慢從(2,2)擴(kuò)展到(m,n)细层,實(shí)際上就是手動(dòng)執(zhí)行歸納的每一步。在現(xiàn)實(shí)的大部分問(wèn)題中唬涧,解題使用(1,1)->(1,n),(m,1)->(m,n)的手段較多疫赎,并不會(huì)真正定義嚴(yán)格的良序并使用廣義歸納法。但是碎节,如果要解決與字符串有關(guān)的問(wèn)題捧搞,可以應(yīng)用前文所提的良序定義與廣義歸納法,使算法正確性更加容易證明。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胎撇,一起剝皮案震驚了整個(gè)濱河市介粘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晚树,老刑警劉巖姻采,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異爵憎,居然都是意外死亡慨亲,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)宝鼓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)刑棵,“玉大人,你說(shuō)我怎么就攤上這事愚铡◎惹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵沥寥,是天一觀的道長(zhǎng)碍舍。 經(jīng)常有香客問(wèn)我,道長(zhǎng)邑雅,這世上最難降的妖魔是什么乒验? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蒂阱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狂塘。我一直安慰自己录煤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布荞胡。 她就那樣靜靜地躺著妈踊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泪漂。 梳的紋絲不亂的頭發(fā)上廊营,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音萝勤,去河邊找鬼露筒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛敌卓,可吹牛的內(nèi)容都是我干的慎式。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瘪吏!你這毒婦竟也來(lái)了癣防?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掌眠,失蹤者是張志新(化名)和其女友劉穎蕾盯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蓝丙,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡级遭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迅腔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片装畅。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沧烈,靈堂內(nèi)的尸體忽然破棺而出掠兄,到底是詐尸還是另有隱情,我是刑警寧澤锌雀,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布蚂夕,位于F島的核電站,受9級(jí)特大地震影響腋逆,放射性物質(zhì)發(fā)生泄漏婿牍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一惩歉、第九天 我趴在偏房一處隱蔽的房頂上張望等脂。 院中可真熱鬧,春花似錦撑蚌、人聲如沸上遥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)粉楚。三九已至,卻和暖如春亮垫,著一層夾襖步出監(jiān)牢的瞬間模软,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工饮潦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留燃异,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓继蜡,卻偏偏與公主長(zhǎng)得像特铝,于是被迫代替她去往敵國(guó)和親暑中。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容