大一下-數(shù)算sessdsa-04recursion數(shù)據(jù)結(jié)構(gòu)與算法Python04遞歸_第1頁
大一下-數(shù)算sessdsa-04recursion數(shù)據(jù)結(jié)構(gòu)與算法Python04遞歸_第2頁
大一下-數(shù)算sessdsa-04recursion數(shù)據(jù)結(jié)構(gòu)與算法Python04遞歸_第3頁
大一下-數(shù)算sessdsa-04recursion數(shù)據(jù)結(jié)構(gòu)與算法Python04遞歸_第4頁
大一下-數(shù)算sessdsa-04recursion數(shù)據(jù)結(jié)構(gòu)與算法Python04遞歸_第5頁
免費預(yù)覽已結(jié)束,剩余56頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

據(jù) 〉本章目據(jù)結(jié)與 〉什么是遞與算( 〉實現(xiàn)遞(〉)〉〉動態(tài)規(guī)劃Dynamic地球與空間科學(xué)學(xué)院/陳斌本章目據(jù) 據(jù)結(jié)與 與算( (〉)〉〉地球與空間科學(xué)學(xué)院/陳斌什么是遞歸構(gòu)數(shù) 〉 遞歸是一種解決問題的方,其精髓是將問題分解為規(guī)模更小的據(jù) ,持續(xù)分直到問題規(guī)小到可以用非常簡單直接方式結(jié) 。構(gòu)與 遞歸的問題分解方式非常獨特,其算法方面的明顯特征就是:在( 法流程中調(diào)用自身( 遞歸為我們提供了一種對復(fù)雜問題的優(yōu)雅解決方案,精妙的遞歸 法常會出奇簡單,令人贊地球與空間科學(xué)學(xué)院/陳斌初識遞歸 我們先從一個不太復(fù)雜的問題開據(jù)構(gòu) 問題:給定一個列表,返回列表中所有數(shù)的構(gòu) 算( 程序很簡單,但假如沒有循環(huán)語句( 還能對不確定長度〉 我們認識到求和實際上最終是由一次次的加法實現(xiàn)的,而加法函恰有兩個參數(shù),這個是確定的。 看看怎么想辦法,將問題規(guī)模較大的列表求和,分解為規(guī)模較小且固定的兩個數(shù)求和(加法地球與空間科學(xué)學(xué)院/陳斌初識遞歸 我們換一個方式來表達數(shù)列求和:全括號表達 結(jié)與 當(dāng)然,由于加法可交換,寫成下面的方式可能更方便些與法 法(〉 上面這個式子,最內(nèi)層的括號(7+9,這是無需循即可計算的,實際上整個求和的過程是這樣:) 觀察上述過程中所包含的重復(fù)模式,可以把求和問題歸納成這樣問

相同問題,規(guī)地球與空間科學(xué)學(xué)院/陳斌初識遞歸 上面的遞歸算法變成程與 與算 (

) 上面程序的要點地球與空間科學(xué)學(xué)院/陳斌遞歸程序如何被執(zhí)行 遞歸函數(shù)調(diào)用和返回過程的鏈據(jù)地球與空間科學(xué)學(xué)院/陳斌遞歸“三定律 為了向阿西莫夫的“機器人三定律”致敬,遞歸算法也總結(jié)出“ 定律 構(gòu) 法 法( 數(shù)列求和的遞歸算法首先具備了基本結(jié)束條件:當(dāng)列表長度為1的候,直接輸出所包含的唯一數(shù),使遞歸算法具備了最終 是什么〉數(shù)列求和處理的數(shù)據(jù)對象是一個列表,而基本結(jié)束條件是長度為1的〉 調(diào)用自身是遞歸算法中最難理解的部分實際上我們理解為“分解成了規(guī)模更小的相同問題”就可以了,在數(shù)列求和算法中,就是“數(shù)列的求和問。地球與空間科學(xué)學(xué)院/陳斌隨堂作業(yè)4- 用listsum計算數(shù)列求和[2,4,6,8,10]要進行多少次遞歸調(diào)用 A)6B)5C)4算 寫出計算階乘的遞歸程算 (def chbpku和課 具有提地球與空間科學(xué)學(xué)院/陳斌整數(shù)轉(zhuǎn)換為任 這個在數(shù)據(jù)結(jié)構(gòu)棧里討論過的算法,又回來了結(jié) 結(jié)構(gòu) 如果上次你被“入?!薄俺鰲!备愕猛灪醯脑?,這次遞歸算法法 定會讓你感到清法 我們用最熟悉的十進制分析下這個問十進制有十個不同符號:convString= 地球與空間科學(xué)學(xué)院/陳斌整數(shù)轉(zhuǎn)換為任 我們用整數(shù)除,和求余數(shù)兩個計算來將整數(shù)一步步拆結(jié) 結(jié)構(gòu) 問題就分解為算 (整數(shù)商成為“更小規(guī)?!眴栴},通過遞歸調(diào)用自身)地球與空間科學(xué)學(xué)院/整數(shù)轉(zhuǎn)換為任意進制:代 下面就是遞歸算法的代構(gòu)算算)地球與空間科學(xué)學(xué)院/陳斌遞歸調(diào)用的實 當(dāng)一個函數(shù)被調(diào)用的時候,系統(tǒng)會把調(diào)用時的現(xiàn)場(包括所有的 部變量,以及返回地址)壓入到調(diào)用棧Call結(jié) 每次調(diào)用,壓入棧的現(xiàn)場數(shù)據(jù)稱為StackFrame棧與法 當(dāng)函數(shù)執(zhí)行完成,返回時,要從調(diào)用棧的棧頂取得返回地址,把法 回值放到棧頂,恢復(fù)現(xiàn)場,彈出棧幀,按地址返回 返回 返回 地球與空間科學(xué)學(xué)院/陳斌遞歸的故 一個古老 :有始無終的無盡遞結(jié) 結(jié) 與 法 前目的地): : 游輪 地球與空間科學(xué)學(xué)院/陳斌隨堂作業(yè)4- 編寫將字符串反轉(zhuǎn)的遞歸函 def算 編寫回文詞判斷的遞歸函算 def( chbpku和課 具有提)地球與空間科學(xué)學(xué)院/陳斌遞歸可視化:圖 前面的種種遞歸算法展現(xiàn)了其簡單而強大的一面,但還是難有個 觀的概念,下面我們通過遞歸作圖來展現(xiàn)遞歸調(diào)用的視覺影結(jié) Python的海龜作圖系統(tǒng)turtle算 算 (爬行:forward(n轉(zhuǎn)向:left(a 筆觸:penup(pendown(pensize( 使用方importturtletturtle.Turtlew=turtle.Screen()#獲取屏幕對象,用于最后的點擊自動關(guān)閉窗口 地球與空間科學(xué)學(xué)院/陳斌海龜作 畫正方據(jù)構(gòu) 畫五邊構(gòu)與 畫六邊法 畫五角)地球與空間科學(xué)學(xué)院/陳斌一個遞歸作圖的例子:螺(最小規(guī)模,0直接退 減小規(guī)模,邊長減陳斌陳分形樹:自相似遞歸圖 分形Fractal,是1975年由Mandelbrot開創(chuàng)的新學(xué)據(jù)與法結(jié) 〉 通常被定義為“一個粗糙或零碎的幾何形可以分成個部分構(gòu) 且每一部分都(至少近似地)是整體縮小后的形狀”,即具有自相算 。與法( 自然界中能找到眾多具有分形性質(zhì)的物) 地球與空間科學(xué)學(xué)院/陳斌yy0分形樹:自相似遞歸圖0 自然現(xiàn)象中所具備的分形特性,使得計算機可以通過分形算法生 非 真的自然場景,下面我們以樹為例做一個粗糙的近結(jié)與(構(gòu) 〉 分形是在不同尺度上都具有相似性的事將這種觀點在對算 觀察上,我們就能看,一棵樹的每個分叉和每條樹枝,實際上都法 征的)與( 這樣,我們可以把樹分解為三個部分:樹干、左邊伸出的小樹、 邊伸出的小大大空分形樹:代算

(法最小規(guī)模,0(右傾20)減小規(guī)模,樹干減回右傾20度,即回

地球與空間科學(xué)學(xué)院/陳斌分形樹:運 注意海龜作圖的次結(jié) 結(jié)畫樹,樹干長度 分形構(gòu)造,平面稱謝爾賓斯基三角形,立體稱謝爾賓斯基金字 結(jié) 與 ( ()謝爾賓斯基三角形:作圖 首先,根據(jù)自相似特性,謝爾賓斯基三角形是由3個相同的謝爾賓 基三角形按照品字形拼疊而成 由于我們無法真正做出謝爾賓斯基三角形(degree->∞),只能法 degree有限的近似圖形法( 在degree有限的情況下,degree=n的三角形,是由3個degree=n-的三角形按照品字形拼疊而成,同時,這3個degree=n-1的三 邊長均為degree=n的三角形的一半(規(guī)模減?。?地球與空間科學(xué)學(xué)院/陳斌

謝爾賓斯基三角形:代等邊三角形(左上右頂點次序算與最小規(guī)模,0算法 )地球與空間科學(xué)學(xué)院/陳斌謝爾賓斯基三角形:代據(jù) 畫指定頂點的等邊三角據(jù) 指定填充顏 算 2,落筆開始填算 3,到上頂 5,回到左頂點閉 畫degree=3的三角地球與空間科學(xué)學(xué)畫degree=3的三角謝爾賓斯基三角形:遞歸調(diào)用過()3210地球與空間科學(xué)學(xué)院/陳斌復(fù)雜遞歸問題:河內(nèi)塔Towerof 河內(nèi)塔問題是由法國數(shù)學(xué)家EdouardLucas于1883年,根據(jù)一個 與 在一 教寺廟里,有3根柱子,其中一根套著64個由小到與 的黃金盤片,僧侶們的任務(wù)就是要把這一疊黃金盤從一根柱子搬( 另一根,但有兩個規(guī)則( 神的旨意是說,一旦這64個盤子完成遷移 神的旨意是千真萬確的地球與空間科學(xué)學(xué)院/陳斌河內(nèi)塔(漢諾塔)問題:3盤片演構(gòu)()構(gòu)()地球與空間科學(xué)學(xué)院/陳斌河內(nèi)塔(漢諾塔)問題:4盤片演地球與空間科學(xué)學(xué)院/陳斌 雖然這些黃金盤片跟世 有著神秘的聯(lián)系,但我們卻不必太 心,據(jù)計算,要搬完這64個盤片結(jié) 與 法 問題如何分解為遞歸形式)地球與空間科學(xué)學(xué)院/陳斌河內(nèi)塔問題:分 我們還是從遞歸三定律來分析河內(nèi)塔問 結(jié) 假設(shè)我們有5個盤子,穿在1#柱,需要挪到3#算 算( 把剩下的最大號盤子直接從1#柱挪到3#柱,再用同樣的辦法把2#柱上的( 接下來的問題就是4個盤子怎么從1#挪到 一摞3個盤子的挪動也照此:分為上面一摞2個,和下面最大號盤 那么2個盤子怎么移動呢?( (實在想不出,那么)最后是1個盤子的移動地球與空間科學(xué)學(xué)院/陳斌河內(nèi)塔問題:遞歸思 將盤片塔從開始柱,經(jīng)由中間柱,移動到目標(biāo)柱結(jié) 結(jié) 與 法( 基本結(jié)束條件,也就是最小規(guī)模問題是:1個盤片的移動問 上面的思路用Python寫出來,幾乎跟語言描述一樣地球與空間科學(xué)學(xué)院/陳斌 河內(nèi)塔問題:代 數(shù) 構(gòu) 減小規(guī)模法 法() 古希臘克里特島米諾斯據(jù)構(gòu) 牛頭人身怪物米諾陶洛構(gòu) 算( 公主,利劍,線( 老國王投) 愛琴探索迷宮:圓明園的黃花 位于圓明園西洋樓景 海龜放在迷宮中間,看它如何能找到出()地球與空間科學(xué)學(xué)院/陳斌迷宮的數(shù)據(jù)結(jié) 首先 整個迷宮的空間(矩形)分為行列整齊的方格,區(qū) 出墻壁和通道結(jié) 與法 考慮用矩陣方式來實現(xiàn)迷宮數(shù)據(jù)結(jié)法 采用不同字符來分別代表“墻壁”“通道”“海龜投放點 ?+:墻空格:通S:海地球與空間科學(xué)學(xué)院/陳斌迷宮的數(shù)據(jù)結(jié)構(gòu):Maze MazeClass的成結(jié) 結(jié) 與 法( 讀入數(shù)據(jù)文件成功)北探索迷宮 確定了迷宮的數(shù)據(jù)結(jié)構(gòu)之后,我們知道,對于海龜來說,其身處 個方格之構(gòu) 構(gòu)算 算法 這樣,探索迷宮并找到出口的遞歸算法思路如下)如果向南還找不到出口,那么將海龜從原位置向西如果向西還找不到出口,那么將海龜從原位置向東地球與空間科學(xué)學(xué)院/陳斌探索迷宮 上面這個思路看起來很完美,但有些細節(jié)是至關(guān)重要 結(jié) 與 ( ( 所以需要有個機制來記錄海龜所走過的路 地球與空間科學(xué)學(xué)院/陳斌探索迷宮 這樣,我們對遞歸調(diào)用的“基本結(jié)束條件”歸納如下 結(jié) 算 ) 為了讓海龜在迷宮圖里跑起來,我們給迷宮數(shù)據(jù)結(jié)構(gòu)MazeClass加一些成員和方updatePosition(rowcolval):更新海龜?shù)奈恢?,并做?biāo)注isExit(row,col):判斷是否“出口”地球與空間科學(xué)學(xué)院/陳斌探索迷宮

地球與空間科學(xué)學(xué)院/陳斌動態(tài)規(guī)劃Dynamic 計算機科學(xué)中許多程序都是為了找到某些問題的最優(yōu) 結(jié) 算 算法( 〉 人們會采用各種策略來解決這些問題,我們這里介紹其中的一種略動態(tài)規(guī)劃 優(yōu)化問題的一個經(jīng)典的案例是為找零兌換最少個數(shù)的硬假設(shè)某次顧客投進 地球與空間科學(xué)學(xué)院/陳斌動態(tài)規(guī)劃 這種方法稱為“貪心法Greedy結(jié) 因為我們每次都試圖解決問題的盡量大的一部結(jié)與 對應(yīng)到兌換硬幣問題,就是每次以最多數(shù)量的最大面值硬幣來迅速減少找與算 “貪心法” 硬幣體系(quarter/dime/nikel/penny)下 現(xiàn)尚 但如果你 決定把自動售貨機出口到Elbonia(系列漫 Dilbert里杜撰的國家),事情就會有點復(fù)雜,因為這個古怪的國家除了上面3種面值之外,還有一種【?21】的硬 按照“貪心法”,在Elbonia,?63還是原來的6個硬 但實際上最優(yōu)解是3個面值?21的硬幣 “貪心法”失效了地球與空間科學(xué)學(xué)院/陳斌兌換硬幣 我們來找一種肯定能找到最優(yōu)解的方法,既然本章是介紹遞歸, 這個解法肯定是遞歸結(jié)與 首先是確定基本結(jié)束條件,兌換硬幣這個問題最簡單直接的情況與法 是,需要兌換的找零,其面值正好等于某種硬法 其次是減小問題的規(guī)模, 硬幣體系里,我們要嘗試4 兌換硬幣:遞歸解法代 法地球與空間科學(xué)學(xué)院/陳斌兌換硬幣:遞歸解法分 遞歸解法雖然能解決問題,但其最大的問題是:極!其!低!效結(jié) 結(jié) 以26分兌換硬幣為例,看看遞歸調(diào)用過程(377次遞歸的一小部分( 地球與 兌換硬幣:遞歸解法改 對這個遞歸解法進行改進的關(guān)鍵就在于消除重復(fù)計 結(jié) 與法 這個算法的中間結(jié)果就是部分找零的最優(yōu)解,在遞歸調(diào)用過程中法 經(jīng)得到的最優(yōu)解被記錄在遞歸調(diào)用之前,先查找表中是否已有部分找零 改進后的解法,極大減少了遞歸調(diào)用的次地球與空間科學(xué)學(xué)院/陳斌兌換硬幣:遞歸解法改進(

)地球與空間科學(xué)學(xué)院/陳斌兌換硬幣:動態(tài)規(guī)劃解構(gòu)算數(shù) 〉 雖然上述的改進可以很好地解決兌換硬幣的問,但記錄中間結(jié)果據(jù) 的表不少未定義的“洞”實際上這種方法還不能稱為動態(tài)結(jié) 規(guī)劃,而是利用了一種叫做“mmoizaion(函數(shù)值緩存)”的技與 能或者一般稱“ahg(”構(gòu)算法 動態(tài)規(guī)劃算法采用了一種更有條理的方式來得到問題的 兌換硬幣的動態(tài)規(guī)劃算法從最簡單的“1分錢找零”的最優(yōu)解開始 逐步遞加上去,直到我們需要的找零錢 在找零遞加的過程中,設(shè)法保持每一分錢的遞加都是最優(yōu)解,一加到求解找零錢數(shù),自然得到最 遞加的過程能保持最優(yōu)解的關(guān)鍵是,其依賴于更少錢數(shù)最優(yōu)解的單計算,而更少錢數(shù)的最優(yōu)解已經(jīng)得到地球與空間科學(xué)學(xué)院/陳斌兌換硬幣:動態(tài)規(guī)劃算 我們來看看如何采用動態(tài)規(guī)劃來解決11分錢的兌換問1 從分錢兌換開1結(jié)與 與 法 地球與空間科學(xué)學(xué)院/陳斌兌換硬幣:動態(tài)規(guī)劃解 計算11分錢的兌換法,我們做如下幾步結(jié) 結(jié) 與 法( 這樣,第1、3步我們都可以得到11分錢的最優(yōu)解:2個硬 1 2 3 4 5 6 7 8 9 10地球與空間科學(xué)學(xué)院/陳斌兌換硬幣:動態(tài)規(guī)劃算法結(jié)從1算()地球與空間科學(xué)學(xué)院/陳斌兌換硬幣:動態(tài)規(guī)劃算法構(gòu)數(shù) 〉 我們注意到動態(tài)規(guī)劃算法的daeage并不是遞歸函,雖然這據(jù) 始解決個更結(jié) 構(gòu) 算 ( 前面的算法已經(jīng)得到了最少硬幣的數(shù)量,但沒有返回硬幣如何組 地球與空間科學(xué)學(xué)院/陳斌兌換硬幣:動態(tài)規(guī)劃算法擴展代()地球與空間科學(xué)學(xué)院/陳斌兌換硬幣:動態(tài)規(guī)劃算法擴展代()北討論:博物館大盜問 大盜潛入博物館,面前有5件寶物,分別有重量和價值,大盜的背 僅能負重20公斤,請問如何選擇

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論