1 / 52

第 6 章 圖形與網路

第 6 章 圖形與網路. 圖形簡介 拓樸排序 圖形表示法 網路的進階應用 圖形追蹤 花費最小擴張樹 圖形最短路徑. 無向圖形 (1). 6-1 圖形簡介. 是一種具備同邊的兩個頂點沒有次序關係,例如 (V 1 ,V 2 ) 與 (V 2 ,V 1 ) 是代表相同的邊。請看下圖 G :. V(G)={V 1 ,V 2 ,V 3 ,V 4 } E(G)={(V 1 ,V 2 ),(V 1 ,V 3 ), (V 1 ,V 4 ), (V 2 ,V 3 ),(V 2 ,V 4 ),(V 3 ,V 4 )}. 無向圖形 (2).

reegan
Télécharger la présentation

第 6 章 圖形與網路

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第6章 圖形與網路 圖形簡介 拓樸排序 圖形表示法 網路的進階應用 圖形追蹤 花費最小擴張樹 圖形最短路徑

  2. 無向圖形(1) 6-1 圖形簡介 • 是一種具備同邊的兩個頂點沒有次序關係,例如(V1,V2)與(V2,V1)是代表相同的邊。請看下圖G: V(G)={V1,V2,V3,V4} E(G)={(V1,V2),(V1,V3), (V1,V4), (V2,V3),(V2,V4),(V3,V4)}

  3. 無向圖形(2) 6-1 圖形簡介 • 無向圖形的相關定義介紹: • 簡單路徑(Simple Path):除了起點和終點可能相同外,其他經過的頂點都不同。 • 循環(Cycle):是種簡單路徑,且終點與起點同一頂點。 • 路徑(Path):對於從頂點Vi到頂點Vj的一條路徑,是指由所經過頂點所成的連續數列。 • 路徑長度(Path Length):是指路徑上所包含邊的數目。 • 完整圖形(Complete Graph):具有n個頂點,且恰好擁有n*(n-1)/2個邊的無向圖形,稱為完整圖形。

  4. 6-1 圖形簡介 • 相連單元(Connected Component):在無向圖形中,相連在一起的最大子圖(Subgraph)。 • 子圖(Subgraph):我們稱G’為G的子圖時,必定存在V(G’) V(G)與E(G’) E(G)。 • 相鄰(Adjacent):如果(Vi,Vj)是E(G)中的一邊,則稱Vi與Vj相鄰。 • 依附(Incident):如果Vi與Vj相鄰,我們則稱(Vi,Vj)這個邊依附於頂點Vi及頂點Vj。

  5. 有向圖形(1) 6-1 圖形簡介 • 是一種每一個邊都可使用有序對<V1,V2>來表示,並且<V1,V2>與<V2,V1>是表示兩個方向不同的邊。如下圖所示: V(G)={V1,V2,V3} E(G3)={<V1,V2>,<V2,V1>,<V3,V2>}

  6. 有向圖形(2) 6-1 圖形簡介 • 向圖形的相關定義介紹: • 完整圖形(Complete Graph):具有n個頂點且恰好有n*(n-1)個邊的有向圖形。 • 路徑(Path):有向圖形中從頂點Vp到頂點Vq的路徑是指一串由頂點所組成的連續有向序列,Vp,Vi1,Vi2…Vin,Vq,其中有<Vp,Vi1>,<Vi1,Vi2>…<Vin,Vq>等邊。 • 強連接(Strongly Connected):有向圖形中,如果每個相異的成對頂點Vi,Vj有直接路徑,同時,有另一條路徑從Vj到Vi,則稱此圖為強連接。 • 強連接單元(Strongly Connected Component):有向圖形中構成強連接的最大子圖。 • 入分支度(In-degree):以頂點V為箭頭的邊數目。 • 出分支度(Out-degree):以頂點V為箭尾的邊數目。

  7. 相鄰矩陣法 6-2 圖形表示法 • 試請寫出下列三圖的相鄰矩陣: • 一個圖形之相鄰矩陣表示法,其結果為:

  8. 相鄰矩陣表示法的優點在演算法的製作與執行上較為方便,在頂點分支度的計算與增刪邊(Edge)時都十分簡單。相鄰矩陣表示法的優點在演算法的製作與執行上較為方便,在頂點分支度的計算與增刪邊(Edge)時都十分簡單。 6-2 圖形表示法 • 第二個圖形的相鄰矩陣表示法,可以用下面的矩陣代表: • 第三個圖形的相鄰矩陣表示法如下:

  9. 相鄰串列法(1) 6-2 圖形表示法 • 這種表示法就是將一個n列的相鄰矩陣,表示成n個鏈結串列。每個節點資料結構如下: • 請寫出下列三圖的相鄰串列法:

  10. 6-2 圖形表示法 • 第一個圖形,其串列表示法如下: • 第二個圖形,其結果則為:

  11. 相鄰複合串列法(1) 6-2 圖形表示法 • 如果能作成讓數個串列共用的複合串列形式,那麼則可對每個邊而言均以一個節點表示,但是這個節點可同時存於兩個串列,節點的結構如下: • M是一個位元的記號欄,用來表示該邊是否已被找過。V1及V2是該邊的兩個頂點。 • LINK1欄:是一個指標,若尚有其他頂點與頂點V1相連,則LINK1指向「該頂點與頂點V1所形成的邊節點」,否則指向NULL。 • LINK2欄:亦是一個指標,若尚有其他頂點與頂點V2相連,則LINK2指向「該頂點與頂點V2所形成的邊節點」,否則指向NULL。

  12. 相鄰複合串列法(2) 6-2 圖形表示法 • 圖形的每一個頂點則依序產生一個串列首,這些串列首分別指向第一個包含該頂點的邊所形成的節點。 • 至於m則是一個屬於布林值(boolean)的標註欄,除了此欄之外,這種複合串列和一般的相鄰串列所需記憶空間相同。 • 範例 6.1.1 • 試求出下圖的相鄰複合串列表示法。

  13. 索引表格法 6-2 圖形表示法 • 它的作法是以一個一維陣列來循序儲存相鄰頂點。 • 建立一個索引表格,n個頂點須建立n個位置於索引表格中,分別對應於陣列中與第一個與該頂點相鄰的位置。以索引表格法表示下列圖形: • 其索引表格法之表示方式為:

  14. 先深後廣搜尋法(1) 6-3 圖形追蹤 • 在所有與Vx相連且未被拜訪過的頂點中任選一個頂點,令Vy,做一個已拜訪過的記號,並以Vy為新的起點進行先深後廣搜尋。 • 使用堆疊技巧遞迴的進行,由於每次均是任意選取一個和Vx相連的頂點當做新的起始,因此搜尋的結果並不唯一。 • 先深後廣搜尋之後若有剩餘頂點,則表示此圖形並不相連:反之則相連。

  15. 先深後廣搜尋法(2) 6-3 圖形追蹤 • 範例程式:ch06_01.cpp

  16. 6-3 圖形追蹤

  17. 6-3 圖形追蹤

  18. 6-3 圖形追蹤 • 執行結果

  19. 先廣後深搜尋法(1) 6-3 圖形追蹤 • 使用下圖來實際模擬先廣後深搜尋法的追蹤過程。 • 首先拜訪V1,並將相鄰的V2、V3也放入佇列。 • 拜訪V2,將V4、V5放入(V1已在佇列中)

  20. 6-3 圖形追蹤 • 再拜訪V3,將V6、V7放入(V1已在佇列中) • 拜訪V4,並將V8放入佇列(V2已在佇列中) • 最後得到的順序為V1、V2、V3、V4、V5、V6、V7、V8

  21. 擴張樹 6-3 圖形追蹤 • 又稱「花費樹」或「展開樹」,其定義如下: • 當一個圖形連通時,則使用DFS或BFS必能拜訪圖形中所有的頂點,且G=(V,E)的所有邊可分成兩個集合:T和B(T為搜尋時所經過的所有邊,而B為其餘未被經過的邊),if S=(V,T)為G中的擴張樹(Spanning Tree),具有以下三項性質: 一個無向圖形的擴張樹是以最少的邊來聯結圖形中所有的頂點,且不造成循環(Cycle)的樹狀結構。 1.E=T+B 2.加入B中的任一邊到S中,則會產生循環(Cycle)。 3.V中的任何2頂點Vi、Vj在S中存在唯一的一條簡單路徑。

  22. 網路表示法(1) 6-3 圖形追蹤 • 陣列表示法 • 第一種表示法是陣列法,其結果如下:

  23. 網路表示法(2) 6-3 圖形追蹤 • 串列表示法 • 第二種表示法─串列表示法,其資料結構為: • 所以,根據上圖我們可以得到以下結果:

  24. Prim演算法 6-4 花費最小擴張樹 • Prim演算法是利用一次加入一邊的方式來產生最小花費擴張樹。作法如下: 有一網路G=(V,E),含有n個頂點,而且V={1,2,3…n},且設定U={1},而U、V是兩個頂點的集合,並且每次產生一個邊。也就是說,從V-U集合中找一頂點X,能與U集合中的某點形成最小成本的邊,把這一頂點X加入U集合,重複其步驟,直到U=V為止。

  25. Kruskal’s演算法(1) 6-4 花費最小擴張樹 • Kruskal’s演算法也是以一次加入一個邊的步驟來建立一個最小花費擴張樹,並將各邊成本利用遞增方式加入此最小花費擴張樹。作法如下: • 範例 6.4.1 • 試說明假設無向圖形G=(V,E),e'E,如果e'的加權值為最大,那麼任一G的MST也有可能包含e'。 有一網路G=(V,E),V={1,2,3,…n},有n個頂點。 E中每一邊皆有成本,T=(V,∮)表示開始時T沒有邊。 首先從E中找有最小成本的邊;若此邊加入T中不會形成循環,則將此邊從E刪除並加入T中,直到T含有n-1邊為止。

  26. Kruskal’s演算法(2) 6-4 花費最小擴張樹 • 範例程式:ch06_02.cpp

  27. 6-4 花費最小擴張樹

  28. 6-4 花費最小擴張樹

  29. 6-4 花費最小擴張樹

  30. 6-4 花費最小擴張樹 • 執行結果

  31. 單點對全部頂點(1) 6-5 圖形最短路徑 • 單點對全部頂點時所使用的是「Dijkstra演算法」,Dijkstra演算法如下: • 假設S={Vi | ViV},而且頂點Vi在已發現的最短路徑上,其中V0S是起點,假設w S,則定義DIST(w)是從V0到w最短路徑,對於這條路徑上每一個節點除了w外,必屬於S之中。且有下列情況: • 若u是目前所找到最短路徑之下一個節點,則u必屬V-S集合中具有最小花費成本的邊。

  32. 6-5 圖形最短路徑 • 若u已被挑選,則u加入於S中,且產生目前的由V0到u的最短路徑,對於wS,DIST(w)被改變成: • 這時利用Dijkstra演算法求得: DIST(w)←Min{DIST(w),DIST(u)+COST(u,w)} 步驟1:D[L]=A[F,I][I=1,N] S={F} V=[1,2,3…N] D為N個位置的陣列,用來儲存某一頂點到其他頂點的最短距離,F:表示由某一起點開始,A[F,I]是表示F點到I點的距離,V是網路中所有頂點的集合,S也是頂點的集合。 步驟2:從V-S集合找一頂點t,使得D(t)是最小值,並將t放入S集合,一直到V-S是空集合為止。 步驟3:根據下面的公式調整D陣列中的值。 D[I]=min(D[I],D[t]+A[t,I])[(I,t)E]

  33. 單點對全部頂點(2) 6-5 圖形最短路徑 • 範例程式:ch06_03.cpp

  34. 6-5 圖形最短路徑

  35. 6-5 圖形最短路徑

  36. 6-5 圖形最短路徑

  37. 6-5 圖形最短路徑 • 執行結果

  38. 所有頂點對兩兩之間的最短距離 6-5 圖形最短路徑 • 作法如下: • 如果圖形有n個頂點,則An(i,j)是從頂點i到頂點j的最短路徑成本,這時將圖形G以相鄰矩陣表示,COST(i,i)=0,且當i≠j,如果<i,j>G,則COST(i,j)=∞。 • 另外A0 (i,j)就是cost(i,j)為Vi到Vj的直通距離,且定義Ak(i,j)為從i到j最短路徑的花費,但這條路徑的中間頂點的註標不能超過k。 • 而演算法依序是A0→A1→A2…An就完成,因此從頂點i到頂點j的最短路徑為: Ak(i,j)=min{Ak-1(i,j),Ak-1(i,k)+Ak-1(k,j)} ,k≧1

  39. 6-5 圖形最短路徑 • 範例 6.5.1 • 請寫出以Floyd演算法求得下圖各頂點間的距離(請依序寫出A0、A1、A2、A3)。

  40. 遞移封閉性(1) 6-5 圖形最短路徑 • 是在決定對於圖形G中的每一組頂點(i,j)是否存在從i到j的路徑。 • 其中定義了兩種矩陣與G相關: • 遞移封閉矩陣(Transitive Closure Matrix)A+,其中當i到j的某條路徑大於0時,A+ [i][j]=1,否則為0。 • 反身遞移封閉矩陣(Reflexive Closure Matrix)A*,其中當i到j的某條路徑大於或者等於0時,A* [i][j]=1,否則為0。

  41. 遞移封閉性(2) 6-5 圖形最短路徑 • 現在如果有一圖形結構G=(V,E),共有n個節點,則我們可以建立一個路徑矩陣(Path Matrix)A,其中: • An(aij)表示從節點i到節點j長度為n的路徑數目。先求得: • 其中Σaikakj=aij為A2中的一個元素之求法。 A1+A2+A3+…An n k=1

  42. 遞移封閉性(3) 6-5 圖形最短路徑 • 範例 6.5.2 • 求下圖的A+。

  43. 拓撲排序(1) 6-6 拓樸排序 • 如果一個AOV網路中具有部份次序的關係,我們可將其化為線性排列,且若Vi是Vj的前行者,則在線性排列,Vi一定在Vj前面。 • 此種特性稱為拓撲排序(Topological Sort)。(注意:其結果並非唯一),排序的步驟如下: 1.在AOV網路中挑選沒有前行者的頂點。 2.輸出此頂點,並將此頂點所接的邊刪除。重覆、步驟,一直到全部頂點輸出為止。

  44. 拓撲排序(2) 6-6 拓樸排序 • 以下來看一個例子。我們試著求出下圖的拓撲排序。 • 1.首先輸出V1,因為V1沒有先行者,且刪除<V1,V2>,<V1,V3>,<V1,V4>。

  45. 6-6 拓樸排序 • 2.可輸出V2、V3或V4,這裡我們選擇輸出V4。 • 3.輸出V3。 • 4.輸出V6。 • 5.輸出V2、V5。 =>拓撲排序則為V1→V4→V3→V6→V2→V5

  46. AOE網路 6-7 網路的進階應用 • 此網路之中包括了14個action(a1、a2、a3…a14)及12個event(V 1、V 2 …V12)。 • 我們知道此專案計劃起始點為V 1,V12為終止點,完成此專案計劃首先必須從事件V 1開始做起,待事件V12完成才告結束。

  47. 績效評核術 6-7 網路的進階應用 • 主要步驟有下列五個步驟: • 劃分工作項目及執行順序 • 評估每個事件所需的時間 • 繪製計劃評核圖 • 計算最早開始時間及最晚開始時間 • 找出臨界路徑

  48. 6-7 網路的進階應用 • 下例我們試圖以PERT來分析專案系統的執行過程,共有四個主要步驟: • 劃分工作項目及執行順序

  49. 6-7 網路的進階應用 • 評估每個事件所需的時間 • 1、最短完成時間 • 2、最長完成時間 • 3、正常時間 • 4、預期時間= • 繪製計劃評核圖 最短時間+最長時間+4*(正常時間) 6 註解 1、圓圈符號代表工作編號 2、箭頭代表執行順序 3、箭頭上數字代表預期時間

  50. 6-7 網路的進階應用 • 計算最早時間及最晚時間 • 最早時間: • 從專案開始起,至某事件最早可開始進行所需之時間,我們用TE表示。 • 最晚時間: • 從專案開始起,至某事件最晚開始進行所需之時間,我們用TL表示。

More Related