計算機(jī)算法設(shè)計與分析(第6版)-課件 ch0602單源最短路徑_第1頁
計算機(jī)算法設(shè)計與分析(第6版)-課件 ch0602單源最短路徑_第2頁
計算機(jī)算法設(shè)計與分析(第6版)-課件 ch0602單源最短路徑_第3頁
計算機(jī)算法設(shè)計與分析(第6版)-課件 ch0602單源最短路徑_第4頁
計算機(jī)算法設(shè)計與分析(第6版)-課件 ch0602單源最短路徑_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單源最短路分支限界法01問題與模型單源最短路徑問題定義010203問題描述邊權(quán)非負(fù)的意義實(shí)際應(yīng)用在帶非負(fù)權(quán)的有向圖G中,給定源點(diǎn)s和目標(biāo)點(diǎn)t,求從s到t的最短路徑。邊權(quán)非負(fù)確保了貪心策略的有效性,即局部最優(yōu)解能逐步擴(kuò)展為全局最優(yōu)解,為分支限界法的應(yīng)用提供了基礎(chǔ)。該問題在路由規(guī)劃、物流配送等眾多領(lǐng)域頻繁出現(xiàn),如導(dǎo)航軟件中尋找兩點(diǎn)間最短路線,物流中規(guī)劃貨物運(yùn)輸路線等。分支限界法核心思路核心要素分支限界法有三大核心要素:將解空間組織為樹結(jié)構(gòu),利用優(yōu)先隊(duì)列按代價進(jìn)行擴(kuò)展,以當(dāng)前最優(yōu)值為界進(jìn)行剪枝。02算法框架優(yōu)先隊(duì)列初始化與源點(diǎn)擴(kuò)展算法啟動時,創(chuàng)建一個空的極小堆,將源點(diǎn)s封裝為路長為0的初始活結(jié)點(diǎn)并入堆,同時初始化dist數(shù)組,令dist[s]=0,其余設(shè)為無窮大。01首次擴(kuò)展源點(diǎn)s,生成s的所有直接后繼結(jié)點(diǎn),為后續(xù)循環(huán)中隊(duì)列非空提供了前提條件,確保算法能夠繼續(xù)進(jìn)行。

02首次擴(kuò)展初始化操作結(jié)點(diǎn)擴(kuò)展與松弛操作在while循環(huán)中,每次取出堆頂?shù)淖钚÷烽L結(jié)點(diǎn)i,作為當(dāng)前擴(kuò)展結(jié)點(diǎn)。取出堆頂結(jié)點(diǎn)01對結(jié)點(diǎn)i的每條出邊(i,j),執(zhí)行松弛操作,若E.length+c[i,j]小于dist[j],則更新dist[j]與prev[j],并將新狀態(tài)(j,dist[j])入堆。松弛操作02松弛操作保證了首次彈出目標(biāo)結(jié)點(diǎn)時,得到的路徑就是最優(yōu)路徑,這是算法能夠正確求解的關(guān)鍵步驟。松弛操作的意義03當(dāng)優(yōu)先隊(duì)列為空時,循環(huán)結(jié)束,此時dist數(shù)組中存儲的就是從源點(diǎn)到各頂點(diǎn)的最短距離。循環(huán)終止條件04剪枝策略與界限更新01剪枝策略利用dist數(shù)組實(shí)時維護(hù)全局上界,任何待擴(kuò)展結(jié)點(diǎn)的路長一旦大于等于當(dāng)前dist[t],即可丟棄,無需生成子樹。02剪枝效果剪枝策略可將指數(shù)級的搜索空間壓縮到多項(xiàng)式級別,大大提高了算法的效率,是分支限界法的關(guān)鍵優(yōu)化手段。03控制關(guān)系與剪枝加速結(jié)點(diǎn)控制概念引入控制關(guān)系定義若兩個結(jié)點(diǎn)到達(dá)同一頂點(diǎn),且甲結(jié)點(diǎn)的路長小于等于乙結(jié)點(diǎn)的路長,則稱甲結(jié)點(diǎn)控制乙結(jié)點(diǎn),乙結(jié)點(diǎn)的子樹可以被剪除??刂脐P(guān)系的優(yōu)勢控制關(guān)系無需知道目標(biāo)點(diǎn)t即可應(yīng)用,在算法的中間階段就能大規(guī)模剪枝,進(jìn)一步壓縮搜索空間,提高算法效率。控制剪枝實(shí)現(xiàn)細(xì)節(jié)在每次更新dist[j]時,檢查堆內(nèi)是否已存在到達(dá)j且路長更大的活結(jié)點(diǎn),若有則標(biāo)記廢棄或即時刪除。檢查與標(biāo)記控制剪枝的實(shí)現(xiàn)與優(yōu)先隊(duì)列的底層結(jié)構(gòu)密切相關(guān),可在對數(shù)級時間內(nèi)完成,有效提高了算法在實(shí)際應(yīng)用中的效率。實(shí)現(xiàn)技巧對效率的影響通過控制剪枝,可以進(jìn)一步減少不必要的計算,使算法在處理大規(guī)模圖時更加高效,具有重要的實(shí)際應(yīng)用價值。04代碼結(jié)構(gòu)MinHeapNode類與優(yōu)先級設(shè)計設(shè)計優(yōu)勢極簡的設(shè)計減少了內(nèi)存拷貝的開銷,同時模板參數(shù)Type的使用使得該類能夠兼容int、double等多種權(quán)值類型,具有良好的通用性。MinHeapNode類包含頂點(diǎn)編號i與當(dāng)前路長length,通過重載int()操作符,將length直接作為堆排序的鍵值。類結(jié)構(gòu)ShortestPaths函數(shù)全程走讀在ShortestPaths函數(shù)中,首先實(shí)例化一個極小堆,用于存儲活結(jié)點(diǎn)。堆實(shí)例化將源點(diǎn)s封裝為路長為0的初始活結(jié)點(diǎn)并入堆,為算法的啟動做好準(zhǔn)備。源結(jié)點(diǎn)構(gòu)造通過while循環(huán),不斷從堆中取出最小路長結(jié)點(diǎn)進(jìn)行擴(kuò)展,利用Insert與DeleteMin操作保證隊(duì)列的平衡。核心循環(huán)通過try-catch機(jī)制處理堆空的情況,當(dāng)堆空時,意味著所有可達(dá)頂點(diǎn)的最短路徑已經(jīng)求出,算法結(jié)束。異常處理05結(jié)果重構(gòu)與擴(kuò)展利用prev數(shù)組還原最短路徑從任意頂點(diǎn)j出發(fā),沿著prev[j]逆向跳轉(zhuǎn)到源點(diǎn)s,再將路徑反轉(zhuǎn),即可得到從s到j(luò)的最短路徑。路徑回溯prev數(shù)組僅存儲前驅(qū)信息,不額外占用過多內(nèi)存,且可以在O(V)時間內(nèi)完成所有頂點(diǎn)路徑的重建,方便進(jìn)行可視化或日志輸出。效率與優(yōu)勢算法復(fù)雜度與適用邊界時間復(fù)雜度算法的時間復(fù)雜度為O((V+E)logV),其中V是頂點(diǎn)數(shù),E是邊數(shù)??臻g復(fù)雜度算法的空間復(fù)雜度為O(V),主要消耗在存儲活結(jié)點(diǎn)的優(yōu)先隊(duì)列和dist、prev數(shù)組上。適用邊界該算法適用于邊權(quán)非負(fù)的情況,若圖中存在負(fù)權(quán)邊,則需要改用Bellman-Ford算法。06小結(jié)思想遷移歸納“界限+優(yōu)先”思想如何通用于旅行

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論