前言
這是我聽老師講課做的筆記,考試要看的。
作者:RodmaChen
關注我的csdn博客,更多數據結構與算法知識還在更新
一.概念
生成樹(必考):圖的極小連通子圖。即:對於有n個頂點的無向連通圖,無論其生成樹的形態如何,所有生成樹中都有且僅有
n-1條邊。
如果在一棵生成樹上添加一條邊,必定構成一個環。
如果一個圖有N個頂點和小於N-1條邊,則是非連通圖。
有N-1條邊的圖不一定是生成樹。
最小生成樹(Minimum Spanning Tree) :如果無向連通圖是一個網,那麼,它的所有生成樹中必有一棵邊的權值總和最小的生成樹。
二.求最小生成樹的兩個算法
必考考兩個算法(5分)
- Prim算法
(1)介紹
假設
G=(V,E)
爲一網圖,其中V
爲網圖中所有頂點的集合
,E
爲網圖
中所有帶權邊的集合
。設置兩個新的集合U和T
,其中集合U用於存放G 的最小生成樹
中的頂點
,集合T存放G的最小生成樹中的邊
。令集合U的初值爲U={u1}
(假設構造最小生成樹時,從頂點u1出發
),集合T的初值爲T={}
Prim算法的思想是:從所有u∈U,v∈V-U的邊中,選取具有最小權值
的邊(u,v),將頂點v加入集合U中,將邊(u,v)加入集合T中,如
此不斷重複,直到U=V時,最小生成樹構造完畢,這時集合T中包含了
最小生成樹的所有邊。
(2)代碼實現
void Prim( MGraph G, VertexType u) {
//用普里姆算法從第u個頂點出發構造網G的最小生成樹T,輸出T的各條邊。
//記錄從頂點集U到V-U的代價最小的邊的輔助數組定義:
/ struct {
// VertexType adivex;
// VRType lowcost;
// }closedge[ MAX_VERTEX_NUM];
//(1) 求初始頂點下標k
i=0;
while(G.vex[i]!=u)
i++;
k=i;
//(2)初始化closedge數組
for(i=0;i<G.n;i++)
{
closedge[i].adivex=u;
closedge[i].lowcost=G.edges[k][i];
}
closedge[k]. lowcost = 0; //初始,U={u}
//(3)找剩餘的頂點
for(i=1;i<G.n;i++)
{
k=minimum(closedge) ;
printf(closedge[k].adjvex;G.vex[k])
closedge[k]. lowcost=0;
for (j=0; j<G. vexnum; j++)
if (G. edgs[k][j] < closedge[j]. lowcost)
{
closedge[j].lowcost = G. edgs[k][j];
closedge[j].adjvex= G. vex[k];
}
}
}
- 克魯斯卡爾(Kruskal)
算法思想(找出最小權值連接)
(1) 首先構造一個只有n個頂點但沒有邊的非連通圖
T={V, ∅ }
,圖中每個頂點自成一個連通分量。(2)當在邊集
E
中選到一條具有最小權值的邊時,若該邊的兩個頂點落在T
中不同的連通分量上,則將此邊加入到生成樹的邊集合T
中;否則將此邊捨去,重新選擇一條權 值最小的邊。
(3)如此重複下去,直到所有頂點在同一個連通分量上爲止。 此時的T即爲所求。
三.有向無環圖(DAG圖)
一個無環的有向圖稱做有向無環圖(directed acycline graph),簡稱DAG圖。
應用:拓撲排序
1.拓撲排序的定義
拓撲排序是將有向圖的頂點排成一個線性序列的過程,它滿足:
- 若i到j有一條路徑,i是j前驅,j是i的後繼.
- 若<i,j>是一條弧,則i是j直接前驅,j是i的直接後繼。
用頂點表示活動,用弧表示活動間的優先關係的有向無環圖,稱爲 頂點表示活動的網(Activity On Vertex
Network),簡稱爲 AOV- 網。
(2)拓撲排序的方法(Topological Sort)
在有向圖中選一個沒有前驅的頂點,且輸出之;
從有向圖中刪除該頂點和以它爲尾的所有弧;
重複以上兩步,直至所有頂點被輸出,或有向圖中沒有無前驅的結點
(1)採用鄰接表作有向圖的存儲結構,且在頭結點中增加一個存放頂點入度的數組。
(2)入度爲0的頂點即爲沒有前驅的結點,刪去頂點及以它爲尾的弧的操作,可換成弧頭頂點的入度減1的操作。
(3)爲避免重複檢測入度爲0的頂點,另設一棧暫存所有入度爲0的頂點。
要考
路徑長度最長的路徑叫做 關鍵路徑。
四.邊學邊練
- 如下圖所示的一個網圖,按照Prim方法,從頂點v1出發,畫出
該網的最小生成樹。
本人博客:https://blog.csdn.net/weixin_46654114
本人b站求關注:https://space.bilibili.com/391105864
轉載說明:跟我說明,務必註明來源,附帶本人博客連接。
請給我點個贊鼓勵我吧