鄧姚文 ywdeng@mail.knu.edu.tw http://w3.im.knu.edu.tw/~joseph/ 資料結構 第八章:圖(Graph) 鄧姚文 ywdeng@mail.knu.edu.tw http://w3.im.knu.edu.tw/~joseph/

Slides:



Advertisements
Similar presentations
動畫與遊戲設計 Data structure and artificial intelligent
Advertisements

樹德科技大學 全面品質管理-以裝備維修為例 指導教授:陳永璋博士 研究生:牛尚文 中華民國94年12月.
第三章 网络计划技术.
《高级人工智能》参考书目 马少平,朱小燕。人工智能。清华大学出版社。 蔡自兴,徐光祐。人工智能及其应用。清华大学出版社。
何謂專案管理? 美國專案管理學會 專案管理就是「為達成或超出利害關係人的需求或期望,把種種知識、技能、工具、技術應用在專案活動上,…,其牽涉到相互競爭的範疇,時間、成本、品質,以及利害關係人各種不同需求和期望之間的平衡」
Chapter 10 Graphs.
第四章 项目的时间管理.
Network Optimization: Models & Algorithms
Chapter 12 圖形結構 12.1 圖形的一些專有名詞 12.2 圖形資料結構表示法 12.3 圖形追蹤 12.4 擴展樹
Chapter 07 Graph 第七章 图 Prof. Qing Wang.
講師:聯捷聯合會計師事務所 張志勝會計師(所長)
資料結構與C++程式設計進階 資料結構概論 講師:林業峻 CSIE, NTU 6/ 7, 2010.
第八章 時程規劃.
第7章 图论基础与应用 PART A 《可视化计算》.
勾股定理 说课人:钱丹.
Minimum Spanning Trees
第八章 第一节 日本 邹旭丹 滨河中学初中部 湘教版地理初一年级.
第五章 物流企业经营决策与计划管理 学习目的:通过学习,重点了解经营决策的概念与类型;物流企业经营决策的程序与方法;物流企业经营计划的制定方法;能较熟练地应用网络计划技术。 第一节 经营决策的概念与类型 第二节 经营决策的方法 第三节 物流企业经营计划 第四节 网络计划技术.
Chap5 Graph.
7.5 擴張樹 (Spanning Tree) 一個無向相連圖 G 的子圖 G’ 如果可用最少的邊來連接G 的
Chapter 4 Spanning Trees
Chap5 Graph.
第8章 圖形結構(Graphs) 8-1 圖形的基本觀念 8-2 圖形的表示法 8-3 圖形的走訪 8-4 擴張樹
Chapter 6 Graph Chang Chi-Chung
教材編號:A305 「專案管理基礎知識與應用實務」第五章 專案時程規劃 PMA「專案助理/技術士」課程 A204-1.
第八章 图 图的基本概念 图的存储结构 图的遍历与连通性 最小生成树 最短路径 活动网络.
复习.
The Greedy Method.
演算法方式總覽 The Divide-and-Conquer Strategy (個各擊破)(binary Searching、Quick Sort…. ) The Greedy Method(貪婪演算法) (Prim MST、Kruskal MST、Djikstra's algorithm) Dynamic.
圖論 (Graph Theory) B 電機四 大鳥 B 電機四 酋長 B 電機四 炫大
Graph 2 Michael Tsai 2012/5/1 連載: 學生上課睡覺姿勢大全
Course 9 NP Theory序論 An Introduction to the Theory of NP
Graph Theory Graph theory is the study of the properties of graph structures. It provides us with a language with which to talk about graphs.
Journal of High Speed Networks 15(2006)
Chapter 7 圖形與網路 資料結構導論 - C語言實作.
第6章 图 6.2图的存储结构 6.3图的遍历 6.4图的连通性 6.5 最短路径 6.6 AOV网与拓扑排序 6. 7 AOE网与关键路径
第16讲 图的矩阵表示, 赋权图与最短路径 主要内容: 1.图的矩阵表示. 2.赋权图与最短路径..
Data Structure.
Chapter12 Graphs Definitions Applications Properties
Yuzhong Qu Nanjing University
Ch07 圖形與網路 淡江大學 周清江
Artificial Intelligence - 人工智慧導論
第9章 基本图算法 本章内容将包含基本的图形表示法,以及先深搜寻,先广搜寻,拓朴排序,Strongly Connected Components。
数据结构概论 第7章 图 董黎刚 浙江工商大学信电学院 2019年4月8日.
第一章 專案管理基本理念 與 MS Project 重要功能
第一章 作業管理導論.
计算机问题求解 – 论题 算法方法 2016年11月28日.
圖論的介紹 第二組 徐榮德 鄭又齊 陳俊嘉.
第15讲 路与回路, 图的连通性 主要内容: 1.路与回路. 2.图的连通性..
Tournament (graph theory)
生成树.
第8章 图 8.1 图的基本概念和基本操作 8.2 图的邻接矩阵存储结构 8.3 图的邻接表存储结构 8.4 图的其他存储结构
Course 8 回溯、分枝與限制 Backtracking, Branch-and-Bound
最短通路问题.
网络模型 Network Modeling Operations Research 运 筹 学
计算机问题求解 – 论题 图的连通度 2018年11月13日.
离散数学─图论初步 南京大学计算机科学与技术系
第三章 树 3.1 树的有关定义 给定一个图G=(V,E), 如果它不含任何回路, 我们就叫它是林, 如果G又是连通的, 即这个林只有一个连通支, 就称它是树. 定义3.1.1 一个不含任何回路的连通图称为树, 用T表示. T中的边称为树枝, 度为1的节点称为树叶.
生成树 离散数学─树 南京大学计算机科学与技术系.
Data Structure.
Advanced Competitive Programming
Advanced Competitive Programming
Advanced Competitive Programming
圖形結構 Graph Structure chapter 9 德明科技大學資訊科技系.
第7章 图.
Maximum Flow.
11506: Angry Programmer ★★★★☆ 題組:Contest Set Archive with Online Judge
Graph 1 Michael Tsai 2012/4/24 連載: 學生上課睡覺姿勢大全
JAVA 程式設計與資料結構 第二十一章 Graph.
Presentation transcript:

鄧姚文 ywdeng@mail.knu.edu.tw http://w3.im.knu.edu.tw/~joseph/ 資料結構 第八章:圖(Graph) 鄧姚文 ywdeng@mail.knu.edu.tw http://w3.im.knu.edu.tw/~joseph/

簡介 以圖形作為問題的抽象化表現 應用圖形理論(Graph Theory)解決問題 2019/5/8

七橋問題:走過所有的橋一次再回原點 2019/5/8

七橋問題:抽象化 尤拉迴路(Eulerian Cycle) 在一個圖之中,是否存在一個路徑,可從一個點出發,走過每一個邊恰好一次,再回到出發點? 2019/5/8

問題的圖形表示法 尤拉迴路(Eulerian Cycle) 在一個圖之中,是否存在一個路徑,可從一個點出發,走過每一個邊恰好一次,再回到出發點? 必須所有的點Degree都為偶數方可! 2019/5/8

圖形專有名詞 G=(V,E) V: vertex(點、節點、頂點) E: edge(邊、連線) V={v1,v2,v3,…,vn}, n>0 E: edge(邊、連線) E={e1,e2,e3,…,em},m>0 2019/5/8

圖形專有名詞 無方向圖形(Undirected Graph) 有方向圖形(Directed Graph) Edge 沒有方向性 e1=(v1,v2) 、 e1=(v2,v1) 相同 有方向圖形(Directed Graph) Edge 有方向性 e1=<v1,v2> 與 e2=<v2,v1> 不同 e1=<v1,v2>,v1為頭(head),v2為尾(tail),方向為:從v1指向v2 2019/5/8

圖形專有名詞 多重圖形(Multigraph) 兩個頂點之間,有多條相同的邊 2019/5/8

圖形專有名詞 完整圖形(Complete Graph) 無向圖若有n個頂點,則有n(n-1)/2個邊 每一對頂點之間都有一個邊使之相連 有向圖若有n個頂點,則有n(n-1)個邊 每一對頂點之間都有一來一去的兩個邊使之相連 2019/5/8

圖形專有名詞 相鄰(Adjacent) 無向圖G=(V,E) 有向圖G=(V,E) u,vV,(u,v)E 稱頂點 u 與頂點 v 相鄰 稱 u 相鄰至(Adjacent To)v 稱 v 相鄰自(Adjacent From)u 2019/5/8

圖形專有名詞 附著(Incident) 若 u, v 兩頂點相鄰 則稱邊(u,v)附著於頂點u (同樣也有:邊(u,v)附著於頂點v) 2019/5/8

圖形專有名詞 子圖(Sub-graph) 若 G’=(V’,E’) 是 G=(V,E) 的子圖,則 pp. 498 V’V E’E 2019/5/8

圖形專有名詞 路徑(Path) 一條從u到v的路徑 路徑長度(Path Length) 簡單路徑(Simple Path) 由頂點u,v1,v2,v3,…vk-1,v與邊(u,v1),(v1,v2),(v2,v3),…,(vk-1,v)所構成 路徑長度(Path Length) 路徑長度 k 為路徑上的邊(Edge)的數量 簡單路徑(Simple Path) 除了起點u與終點v之外,路徑上的頂點皆不相同(路徑中沒有交叉點) 2019/5/8

圖形專有名詞 循環(Cycle)又稱:迴圈 Acyclic(沒有迴圈) 起點與終點相同的簡單路徑 圖中沒有迴圈(Cycle) A tree is an acyclic graph 2019/5/8

圖形專有名詞 連通(Connected) 連通圖形(Connected Graph) 連通單元(Connected Component) 若頂點u與v連通,則 存在一簡單路徑連接u與v 連通圖形(Connected Graph) G=(V,E)中,每一對頂點都互相連通 連通單元(Connected Component) 圖中最大的連通子圖(Maximal Connected Subgraph) 2019/5/8

圖形專有名詞 緊密連通(Strongly Connected) 緊密連通單元(Strongly Connected Component) 有相向圖形(Directed Graph)之中,每一對頂點 u, v 之間都有一條從 u 到 v 的路徑以及一條從 v 到 u 的路徑(Directed Graph) 緊密連通單元(Strongly Connected Component) 緊密連通最大子圖 2019/5/8

圖形專有名詞 分支度(Degree) 無向圖G=(V,E) 有向圖G=(V,E) uV 頂點 u 的分支度=附著於 u 的邊的總數 vV 頂點 v 的向內分支度(in-degree)=以 v 為尾的邊的總數 (箭頭指向 v) 頂點 v 的向外分支度(out-degree)=以 v 為頭的邊的總數 (箭頭從 v 指出去) 2019/5/8

圖形專有名詞 無向圖G=(V,E) V={v1,v2,v3,…,vn}, n>0 E={e1,e2,e3,…,em},m>0 令 d(vi) 為 vi 的分支度,則 2019/5/8

圖形專有名詞 在本章之中若無特別說明,則所述之圖為無向圖,且有下列限制: 不允許任何頂點有連接自己的邊 (v,v) (Self-loop) 相同的邊不得重複(multigraph) 2019/5/8

圖形表示法 相鄰矩陣(Adjacent Matrix) 矩陣A[u][v] = 0 表示邊(u,v)不存在 無向圖的相鄰矩陣以對角線對稱,A[u][v]=A[v][u] G=(V,E),|V|=n, 頂點 iV 的分支度(Degree) 無向圖 有向圖 2019/5/8

圖形表示法 相鄰串列(Adjacent List) 反向相鄰串列(Inverse Adjacent List) 以鍵結串列儲存與頂點u相鄰的其他頂點 需要|V|個鍵結串列 反向相鄰串列(Inverse Adjacent List) 各頂點將相鄰到他自己的頂點以鍵結串列儲存起來(Directed Graph) 2019/5/8

圖形的搜尋或走訪(DFS) 深先搜尋(depth-first search)縱向優先 使用 Stack 時間複雜度: 使用 Adjacent Matrix: O(n2) 使用 Adjacent List: O(n+e), n=|V|, e=|E| 當 n > e 時為O(n) 當 e > n 時為O(e) 需用一個一維陣列 visited 紀錄走過的路徑 2019/5/8

Depth-First Search (DFS) 先拜訪起點 v 選擇一個與 v 相鄰而且尚未被拜訪過的節點 w,以 w 為起點執行 DFS 若一頂點的所有相鄰頂點都已經被拜訪過了,則退回到最近曾拜訪過的頂點,針對與該頂點相鄰且尚未被拜訪過的頂點執行 DFS 若從任何已走過的頂點,都無法再找到未被拜訪過的頂點,則結束 DFS 2019/5/8

圖形的搜尋或走訪:BFS 廣先搜尋(breadth-first search)橫向優先 使用 Queue 需用一個一維陣列 visited 紀錄走過的路徑 2019/5/8

Breadth-First Search (BFS) 1. 準備一個佇列 Q 2. 將起始頂點 v 加入到 Q 之中(Enqueue) 3. 若 Q 不是空的,則執行下列步驟,否則跳到步驟 4: 3.1 從 Q 取出一頂點 w(Dequeue) 3.2 將 w 標示為『已拜訪過』 3.3 將所有與 w 相鄰且尚未標示『已拜訪過』的頂點加入到 Q 之中(Enqueue) 3.4 回到步驟 3 4. 結束 2019/5/8

尋找圖形的連通組合 Find connected components for (i = 0; i < n; i++) visited[i] = 0; if (visited[i] == 0) DFS(i); 2019/5/8

擴展樹 Spanning Tree G=(V,E) is connected T=(V,ET), ETE contains edges visited in some DFS or BFS 以 DFS 產生的擴展樹:DFS 擴展樹 以 BFS 產生的擴展樹:BFS 擴展樹 2019/5/8

最小成本擴展樹 Minimum Cost Spanning Tree Weighted graph G=(V,E) T=(V,ET), ET 所有邊的成本加總值為最小 Prim’s Algorithm: Greedy Method 每次加入一個距離最近的相鄰頂點(及附著的邊),直到所有的頂點都加入為止 O(n2) Kruskal’s Algorithm: Greedy Method 每次挑選一個 Weight 最小的邊,但不可形成迴圈,直到數量達 n-1 個邊為止 O(e log e) or O(n2 log n) e = O(n2) 2019/5/8

最短路徑(Shortest Path) 單一起點至其他頂點(Single Source/All Destination) Dijkstra’s Algorithm O(n2) 任意兩點之間(All Pairs) 輪流以每一個頂點做一次Dijkstra Dynamic Programming A[i][j] = min(A[i][j], A[i][k] + A[k][j]), 0<=k<=n-1 O(n3) 2019/5/8

Dijkstra’s Algorithm D[i] = A[F, i], i=1,N(F 為起始頂點,A[F, i] 為頂點 F 到頂點 i 的距離) S={F} V={1,2,3,…,N} 若 V-S 不是空集合,執行下列步驟,否則跳到步驟 3: 在 V-S 集合中找一頂點 t 使得 D[t] 為最小值,並將 t 加入 S 對於所有與 t 相鄰的頂點 i,調整 D[i] = min(D[i], D[t]+A[t, i]) 結束 2019/5/8

遞移封閉 (Transitive Closure) aRb AND bRc => aRc R: relation A+[i][j]=A+[i][j] || A+[i][k] && A+[k][j] 有向圖:測試連通性 2019/5/8

拓樸排序 (Topological Sort) AOV Network: Activity-on-Vertex Network 頂點代表工作(Task)或活動(Activity) 邊代表工作之間的順序關係(Precedence Relations) <u,v> u: immediate predecessor 前行者 v: immediate successor 後繼者 Transitive: a,b,cA, ab AND bc => ac 目的:排出工作執行的順序 2019/5/8

Topological Sort 演算法 在 AOV Network 中任意挑選沒有前行者的頂點 輸出此頂點,並將此頂點所連接的邊刪除 重複步驟 1, 2 直到全部的頂點都輸出為止 2019/5/8

臨界路徑法 Critical Path Method AOE Network: 邊(Edge)代表活動(Activity) 計畫績效評估 完成計畫所需的最短時間 為縮短整個計畫執行時間,那一些工作必須投入較多的資源? 專案評估與技術查核 Project Evaluation and Review Technique, PERT 計畫完工所需的最少時間 AOE Network 上從起始點到結束點的最長路徑 評估每一件工作的最早開始時間與最晚完成時間 Critical Activity:最早開始時間=最晚完成時間 表示完全不允許延誤 臨界路徑 Critical Path 2019/5/8

臨界路徑法 最早開始時間 Earliest Start Time 最晚完成時間 Latest Completion Time 先設ES[i] = 0,在 Topological Sort 過程中修正: ES(k) = max( ES(k), ES(j)+<j,k>時間 ) 最晚完成時間 Latest Completion Time LC(k) = min( LC(k), LC(j)-<j,k>時間 ) 2019/5/8