版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)與算法
—圖主講教員:段凌宇2014年5月30日
北京大學(xué)信息科學(xué)與技術(shù)學(xué)院,轉(zhuǎn)載或翻印必究北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page2最小支撐樹
示例(a)(a)的MST(a)的MST北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page36.6.1Prim算法Prim算法的具體操作是:從圖中任意一個(gè)頂點(diǎn)開始,首先把這個(gè)頂點(diǎn)包括在MST里;然后在那些其一個(gè)端點(diǎn)已在MST里,另一個(gè)端點(diǎn)還未在MST里的邊中,找權(quán)最小的一條邊,并把這條邊包括進(jìn)MST里(和其不在MST里的那個(gè)端點(diǎn));如此進(jìn)行下去,每次往MST里加一個(gè)頂點(diǎn)和一條權(quán)最小的邊,直到把所有的頂點(diǎn)都包括進(jìn)MST里。RobertClayPrim(1921-)at
Bell
Labs北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page4證明用Prim算法構(gòu)造的
生成樹確實(shí)是MST首先證明這樣一個(gè)結(jié)論:設(shè)T(V*,E*)是連通無向圖G=(V,E)的一棵正在構(gòu)造的生成樹,又E中有邊e=(Vx,Vy),其中Vx∈V*,Vy不屬于V*,且e的權(quán)W(e)是所有一個(gè)端點(diǎn)在V*里,另一端不在V*里的邊的權(quán)中最小者,則一定存在G的一棵包括T(V*,E*)
的MST包括邊e=(Vx,Vy)。用反證法北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page5設(shè)G的任何一棵包括T的MST都不包括e=(Vx,Vy),
且設(shè)T’是一棵這樣的MST。由于T’是連通的,因此有從Vx到Vy的路徑Vx,…,Vy
把邊e=(Vx,Vy)加進(jìn)樹T’,得到一個(gè)回路Vx,…,Vy,Vx×北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page6上述路徑Vx,…,Vy中必有邊e’=(Vp,Vq),其中Vp∈V*,Vq不屬于V*,由條件知W(e’)≥W(e),從回路中去掉邊e’,回路打開,成為另一棵生成樹T”,T”包括邊
e=(Vx,Vy),且各邊權(quán)的總和不大于T’各邊權(quán)的總和。因此,T’是一棵包括邊e的MST,與假設(shè)矛盾,即證明了我們的結(jié)論。也證明了Prim算法構(gòu)造MST的方法是正確的,因?yàn)槲覀兪菑腡包括任意一個(gè)頂點(diǎn)和0條邊開始,每一步加進(jìn)去的都是MST中應(yīng)包括的邊,直至最后得到MST?!帘本┐髮W(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page7Prim算法
的程序?qū)崿F(xiàn)voidPrim(Graph&G,ints,Edge*&MST
){
intMSTtag=0;//最小支撐樹邊的標(biāo)號(hào)
Edge*MST=newEdge[G.VerticesNum()-1];
//最小值堆
MinHeap<Edge>H(G.EdgesNum());//初始化Mark數(shù)組、距離數(shù)組
for(inti=0;i<G.VerticesNum();i++) G.Mark[i]=UNVISITED;intv=s;G.Mark[v]=VISITED;//開始頂點(diǎn)首先被標(biāo)記do{//將以v為頂點(diǎn),另一頂點(diǎn)未被標(biāo)記的邊插入最小值堆Hfor(Edgee=G.FirstEdge(v);G.IsEdge(e);e=G.NextEdge(e)) if(G.Mark[G.ToVertex(e)]==UNVISITED) H.Insert(e);
//尋找下一條權(quán)最小的邊
boolFound=false; while(!H.empty()){e=H.RemoveMin();if(G.Mark[G.ToVertex(e)]==UNVISITED){Found=true;break;}}北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page8北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page9if(!Found){ Print("不存在最小支撐樹。");delete[]MST;//釋放空間
MST=NULL;//MST是空數(shù)組
return; };v=G.ToVertex(e);
//在頂點(diǎn)v的標(biāo)志位上做已訪問的標(biāo)記
G.Mark[v]=VISITED;//將邊e加到MST中
AddEdgetoMST(e,MST,MSTtag++);}while(MSTtag<(G.VerticesNum()-1)); }北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page106.6.1討論P(yáng)rim算法與Dijkstra算法十分相似;唯一區(qū)別是:Prim算法要尋找的是離已加入頂點(diǎn)距離最近的頂點(diǎn),而不是尋找離固定頂點(diǎn)距離最近的頂點(diǎn);其時(shí)間復(fù)雜度分析與Dijkstra算法相同,即Θ(|V|2),其中|V|為圖的頂點(diǎn)數(shù)
。北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page116.6.2Kruskal算法基本思想:對于圖G=(V,E),開始時(shí),將頂點(diǎn)集分為|V|個(gè)等價(jià)類,每個(gè)等價(jià)類只包括一個(gè)頂點(diǎn);然后以權(quán)的大小為順序處理各條邊;
若某條邊連接兩個(gè)不同等價(jià)類的頂點(diǎn),則這條邊被添加到MST,并將這兩個(gè)等價(jià)類被合并為一個(gè);反復(fù)執(zhí)行此過程,直到只剩下一個(gè)等價(jià)類。JosephBernardKruskal
1928
-
北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page12Kruskal算法示例北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page13北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page14Kruskal算法的
程序?qū)崿F(xiàn)voidKruskal(Graph&G,Edge*&MST
){ PartreeA(G.VerticesNum());//等價(jià)類
//最小值堆(minheap)
MinHeap<Edge>H(G.EdgesNum());
//最小支撐樹
MST=newEdge[G.VerticesNum()-1];
//最小支撐樹邊的標(biāo)號(hào)
intMSTtag=0;北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page15//將圖的所有邊插入最小值堆H中for(inti=0;i<G.VerticesNum();i++)
{ for(Edgee=G.FirstEdge(i);
G.IsEdge(e);e=G.NextEdge(e))
if(G.FromVertex(e)<G.ToVertex(e)) H.Insert(e); }北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page16 intEquNum=G.VerticesNum();//開始時(shí)有|V|個(gè)等價(jià)類
while(EquNum>1)
{//合并等價(jià)類 Edgee=H.RemoveMin();//獲得下一條權(quán)最小邊
if(e.weight==INFINITY) {
Print("不存在最小支撐樹.”);delete[]MST;//釋放空間
MST=NULL;//MST是空數(shù)組
return; }北京大學(xué)信息學(xué)院,轉(zhuǎn)載或翻印必究Page17intfrom=G.FromVertex(e);intto=G.ToVertex(e);//記錄該條邊的信息
if(A.differ(from,to))//如果邊e的兩個(gè)頂點(diǎn)不在一個(gè)等價(jià)類
{//將邊e兩個(gè)頂點(diǎn)所在的兩個(gè)等價(jià)類合并為一個(gè) A.UNION(from,to);
//
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年房地產(chǎn)市場的區(qū)域競爭分析
- 2025年高校事業(yè)編筆試試卷真題及答案
- 2025年北大信工面試筆試及答案
- 2025年亞馬遜運(yùn)營的筆試題庫及答案
- 2025年事業(yè)編筆試第三面試及答案
- 2025年造型設(shè)計(jì)筆試及答案
- 2025年北京市中醫(yī)規(guī)培筆試及答案
- 2025年廣西平陸運(yùn)河集團(tuán)筆試題目及答案
- 2025年安徽宿州人事考試及答案
- 2026年房價(jià)瘋漲背后的政策驅(qū)動(dòng)因素
- 部編版道德與法治八年級(jí)上冊每課教學(xué)反思
- 四川省成都市2023-2024學(xué)年高一上學(xué)期語文期末考試試卷(含答案)
- 部編人教版 語文 六年級(jí)下冊 電子書
- DL-T-5728-2016水電水利工程控制性灌漿施工規(guī)范
- 鋼管支架貝雷梁拆除施工方案
- JJG 365-2008電化學(xué)氧測定儀
- 卷閘門合同書
- 煤礦運(yùn)輸知識(shí)課件
- 人口信息查詢申請表(表格)
- 一年級(jí)上冊數(shù)學(xué)期末質(zhì)量分析報(bào)告
- 公共視頻監(jiān)控系統(tǒng)運(yùn)營維護(hù)要求
評(píng)論
0/150
提交評(píng)論