實(shí)驗(yàn)1.貪心法求解單源最短路徑問題.doc

實(shí)驗(yàn)1.貪心法求解單源最短路徑問題.doc

ID:48366422

大小:52.51 KB

頁(yè)數(shù):5頁(yè)

時(shí)間:2019-11-28

實(shí)驗(yàn)1.貪心法求解單源最短路徑問題.doc_第1頁(yè)
實(shí)驗(yàn)1.貪心法求解單源最短路徑問題.doc_第2頁(yè)
實(shí)驗(yàn)1.貪心法求解單源最短路徑問題.doc_第3頁(yè)
實(shí)驗(yàn)1.貪心法求解單源最短路徑問題.doc_第4頁(yè)
實(shí)驗(yàn)1.貪心法求解單源最短路徑問題.doc_第5頁(yè)
資源描述:

《實(shí)驗(yàn)1.貪心法求解單源最短路徑問題.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)

1、實(shí)驗(yàn)1.貪心法求解單源最短路徑問題實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)要求基于算法設(shè)計(jì)與分析的一般過程(即待求解問題的描述、算法設(shè)計(jì)、算法描述、算法正確性證明、算法分析、算法實(shí)現(xiàn)與測(cè)試)。應(yīng)用貪心策略求解有向帶權(quán)圖的單源最短路徑問題。實(shí)驗(yàn)?zāi)康膗通過本次實(shí)驗(yàn),掌握算法設(shè)計(jì)與分析的一般過程,以及每個(gè)步驟的基本方法。并應(yīng)用貪心法求解單源最短路徑問題。環(huán)境要求對(duì)于環(huán)境沒有特別要求。對(duì)于算法實(shí)現(xiàn),可以自由選擇C,C++,Java,甚至于其他程序設(shè)計(jì)語(yǔ)言。實(shí)驗(yàn)步驟步驟1:理解問題,給出問題的描述。步驟2:算法設(shè)計(jì),包括策略與數(shù)據(jù)結(jié)構(gòu)的選擇步驟3:描述算法。希望采用源代碼以外的

2、形式,如偽代碼、流程圖等;步驟4:算法的正確性證明。需要這個(gè)環(huán)節(jié),在理解的基礎(chǔ)上對(duì)算法的正確性給予證明;步驟5:算法復(fù)雜性分析,包括時(shí)間復(fù)雜性和空間復(fù)雜性;步驟6:算法實(shí)現(xiàn)與測(cè)試。附上代碼或以附件的形式提交,同時(shí)貼上算法運(yùn)行結(jié)果截圖;步驟7:技術(shù)上、分析過程中等各種心得體會(huì)與備忘,需要言之有物。說明:步驟1-6在“實(shí)驗(yàn)結(jié)果”一節(jié)中描述,步驟7在“實(shí)驗(yàn)總結(jié)”一節(jié)中描述。實(shí)驗(yàn)結(jié)果1.問題描述給定一個(gè)有向帶全圖G=(V,E),其中每條邊的權(quán)是一個(gè)非負(fù)實(shí)數(shù)。另外,給定V中的一個(gè)頂點(diǎn),稱為源點(diǎn)?,F(xiàn)在要計(jì)算源點(diǎn)到所有其他各個(gè)頂點(diǎn)的最短路徑長(zhǎng)度,這里的路徑

3、長(zhǎng)度是指路徑上所有經(jīng)過邊的權(quán)值之和。這個(gè)問題通常稱為單源最短路徑問題。2.(1)Dijkstra算法思想按各個(gè)結(jié)點(diǎn)與源點(diǎn)之間路徑長(zhǎng)度的非減次序,生成源點(diǎn)到各個(gè)結(jié)點(diǎn)的最短路徑的方法。即先求出長(zhǎng)度最短的一條路徑,再參照它求出長(zhǎng)度次短的一條路徑。依此類推,直到從源點(diǎn)到其它各結(jié)點(diǎn)的最短路徑全部求出為止。1959年提出的,但當(dāng)時(shí)并未發(fā)表。因?yàn)樵谀莻€(gè)年代,算法基本上不被當(dāng)做一種科學(xué)研究的問題。(2)Dijkstra算法設(shè)計(jì)集合S與V-S的劃分:假定源點(diǎn)為u。集合S中的結(jié)點(diǎn)到源點(diǎn)的最短路徑的長(zhǎng)度已經(jīng)確定,集合V-S中所包含的結(jié)點(diǎn)到源點(diǎn)的最短路徑的長(zhǎng)度待定。

4、特殊路徑:從源點(diǎn)出發(fā)只經(jīng)過S中的結(jié)點(diǎn)到達(dá)V-S中的結(jié)點(diǎn)的路徑。貪心策略:選擇特殊路徑長(zhǎng)度最短的路徑,將其相連的V-S中的結(jié)點(diǎn)加入到集合S中。3、描述算法Dijkstra算法的偽代碼:DIJKSTRA(G,w,s)INITIALIZE-SINGLE-SOURCE(G,s)S=ΦQ=G.V//V-S中的結(jié)點(diǎn)按特殊路徑長(zhǎng)度非減排序whileQ≠Φu=EXTRACT-MIN(Q)S=S∪{u}foreachv∈G.Adj[u]RELAX(u,v,w)4、Dijkstra算法的求解步驟:步驟1:設(shè)計(jì)合適的數(shù)據(jù)結(jié)構(gòu)。帶權(quán)鄰接矩陣C記錄結(jié)點(diǎn)之間的權(quán)值,數(shù)組

5、dist來記錄從源點(diǎn)到其它頂點(diǎn)的最短路徑長(zhǎng)度,數(shù)組p來記錄最短路徑。u為源點(diǎn);步驟2:初始化。令集合S={u},對(duì)于集合V-S中的所有頂點(diǎn)x,設(shè)置dist[x]=C[u][x]。如果頂點(diǎn)x與源點(diǎn)相鄰,設(shè)置p[x]=u;否則,p[x]=-1;步驟3:貪心選擇結(jié)點(diǎn)。在集合V-S中依照貪心策略來尋找使得dist[x]具有最小值的頂點(diǎn)t,t就是集合V-S中距離源點(diǎn)u最近的頂點(diǎn)。步驟4:更新集合S和V-S。將頂點(diǎn)t加入集合S中,同時(shí)更新集合V-S;步驟5:判斷算法是否結(jié)束。如果集合V-S為空,算法結(jié)束。否則,轉(zhuǎn)步驟6;步驟6:對(duì)相關(guān)結(jié)點(diǎn)做松弛處理。對(duì)集

6、合V-S中的所有與頂點(diǎn)t相鄰的頂點(diǎn)x,如dist[x]>dist[t]+C[t][x],則dist[x]=dist[t]+C[t][x]并設(shè)置p[x]=t。轉(zhuǎn)步驟3。5、Dijkstra算法的正確性證明–貪心選擇性質(zhì):采用歸納法。當(dāng)S={s,p}時(shí),則除源結(jié)點(diǎn)s之外的所有結(jié)點(diǎn)中,結(jié)點(diǎn)p到源點(diǎn)s的距離最短。這是顯然的。假設(shè)當(dāng)S={s,p1,…,pk}時(shí),即k個(gè)結(jié)點(diǎn)p1,…,pk到源點(diǎn)s的距離最短。當(dāng)S={s,p1,…,pk,pk+1}時(shí),很顯然結(jié)點(diǎn)pk+1到源點(diǎn)s的距離是最短的。需證明:此時(shí)結(jié)點(diǎn)p1,…,pk到源點(diǎn)s的距離仍然是最短的。用反證法

7、假設(shè)當(dāng)結(jié)點(diǎn)pk+1加入到S后,pi結(jié)點(diǎn)經(jīng)由結(jié)點(diǎn)pk+1到源點(diǎn)s的距離更短,即d(s,pk+1)+d(pk+1,pi)

8、tra算法采用貪心策略,按各個(gè)頂點(diǎn)與源點(diǎn)之間路徑長(zhǎng)度遞增的次序,生成源點(diǎn)到各個(gè)頂點(diǎn)的最短路徑方法。先求出長(zhǎng)度最短的一條路徑,在參照它求出長(zhǎng)度次短的一條路徑,以此類推

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。