Graph 1 Michael Tsai 2012/4/24 連載: 學生上課睡覺姿勢大全

Slides:



Advertisements
Similar presentations
第四章 家庭財務報表及預算的編製與分析.
Advertisements

算法分析(3) 重要的数据结构.
動畫與遊戲設計 Data structure and artificial intelligent
Chapter 10 Graphs.
Chapter 12 圖形結構 12.1 圖形的一些專有名詞 12.2 圖形資料結構表示法 12.3 圖形追蹤 12.4 擴展樹
資料結構與C++程式設計進階 資料結構概論 講師:林業峻 CSIE, NTU 6/ 7, 2010.
第7章 图论基础与应用 PART A 《可视化计算》.
Graph Theory Chapter 1 An Introduction to Graphs
Minimum Spanning Trees
An Adaptive Cross-Layer Multi-Path Routing Protocol for Urban VANET
Large-Scale Malware Indexing Using Function-Call Graphs
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
Chap5 Graph.
7.5 擴張樹 (Spanning Tree) 一個無向相連圖 G 的子圖 G’ 如果可用最少的邊來連接G 的
Chapter 4 Spanning Trees
Chap5 Graph.
樹狀結構 陳怡芬 2018/11/16 北一女中資訊專題研究.
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
第8章 圖形結構(Graphs) 8-1 圖形的基本觀念 8-2 圖形的表示法 8-3 圖形的走訪 8-4 擴張樹
Chapter 6 Graph Chang Chi-Chung
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 電機四 炫大
第4章 网络互联与广域网 4.1 网络互联概述 4.2 网络互联设备 4.3 广域网 4.4 ISDN 4.5 DDN
Graph 2 Michael Tsai 2012/5/1 連載: 學生上課睡覺姿勢大全
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.
第十五章 Linked List, Stack and Queue
Journal of High Speed Networks 15(2006)
Chapter 7 圖形與網路 資料結構導論 - C語言實作.
樹狀結構 Tree Structure chapter 7 德明科技大學資訊科技系.
String Matching Michael Tsai 2012/06/04.
Chapter12 Graphs Definitions Applications Properties
Yuzhong Qu Nanjing University
樹 2 Michael Tsai 2013/3/26.
Ch07 圖形與網路 淡江大學 周清江
Chapter 2 Basic Concepts in Graph Theory
感謝同學們在加分題建議. 我會好好研讀+反省~
B+ Tree.
第9章 基本图算法 本章内容将包含基本的图形表示法,以及先深搜寻,先广搜寻,拓朴排序,Strongly Connected Components。
Version Control System Based DSNs
数据结构概论 第7章 图 董黎刚 浙江工商大学信电学院 2019年4月8日.
每周三交作业,作业成绩占总成绩的15%; 平时不定期的进行小测验,占总成绩的 15%;
Linked Lists Prof. Michael Tsai 2013/3/12.
Hashing Michael Tsai 2013/06/04.
圖論的介紹 第二組 徐榮德 鄭又齊 陳俊嘉.
第15讲 路与回路, 图的连通性 主要内容: 1.路与回路. 2.图的连通性..
Tournament (graph theory)
String Matching Michael Tsai 2013/05/28.
生成树.
Disjoint Sets Michael Tsai 2013/05/14.
第8章 图 8.1 图的基本概念和基本操作 8.2 图的邻接矩阵存储结构 8.3 图的邻接表存储结构 8.4 图的其他存储结构
鄧姚文 資料結構 第八章:圖(Graph) 鄧姚文
最短通路问题.
赵才荣 同济大学,电子与信息工程学院,智信馆410室
计算机问题求解 – 论题 图的连通度 2018年11月13日.
离散数学─图论初步 南京大学计算机科学与技术系
Dynamic Programming II
Elementary Graph Algorithms
Konig 定理及其证明 杨欣然
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
圖 論 簡 介.
计算机问题求解---论题3-12 图中的匹配与因子分解
JAVA 程式設計與資料結構 第二十一章 Graph.
Presentation transcript:

Graph 1 Michael Tsai 2012/4/24 連載: 學生上課睡覺姿勢大全 http://www.wretch.cc/blog/chi771027/26489957 Graph 1 Michael Tsai 2012/4/24

Königsberg Seven Bridge Problem 西元1736年, Euler嘗試著要解答 這個問題: 右邊地圖中, 有沒有可能找出一條 路徑, 使得每一條橋都走過一次之後 又回到出發點? 答案: Graph必須要是connected & 必須有0個或2個node有odd degree

A graph G: a graph, consists of two sets, V and E. V: a finite, nonempty set of vertices. E: a set of pairs of vertices. G=(V,E) V={0,1,2,3} E={(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)} 2 1 3

Directed & undirected graph Graph中, edge有方向的叫做directed graph, 沒方向的叫做undirected graph Directed graph 通常又叫digraph Undirected graph 通常就只叫做graph (1,2) 和 (2,1) 在undirected graph是一樣的edge <1,2>和<2,1>在digraph是不一樣的edge V={0,1,2,3} E=? E={<0,1>,<0,2>,<1,2>,<2,1>,<3,1>,<3,2>} 2 1 3 註: 課本裡面digraph也使用() 小括號, 不過我比較喜歡用<>角括號來表示digraph的edge, 覺得這樣比較清楚.

Self Edge & Multigraph Graph with self-edges Multigraph <v,v> 2 2 2 1 1 3 3

Maximum number of edges 一個有n vertices的graph, 最多有幾個edges? 一個有n vertices的digraph, 最多有幾個edges? 答案: graph: 𝑛 𝑛−1 2 , digraph: 𝑛(𝑛−1)

怎麼這麼多名詞XD 相鄰(adjacent): 如果有edge (u,v), 那麼u, v兩vertices就是adjacent. 相鄰(adjacent): 如果有edge (u,v), 那麼u, v兩vertices就是adjacent. 如果有edge <u,v> 那麼我們說 v is adjacent to u. (有些課本用相反的定義T_T) 作用(incident): 如果有edge (u,v) 那麼u, v兩vertices就是incident (作用) on (在) u和 v上面 <u,v> is incident from u and is incident to v. <u,v> leaves u and enters v. Subgraph: 如果G=(V,E), G’=(V’,E’)是G的subgraph, 則V′⊆V且E′⊆E 2 1 3

Degree of vertex Vertex的degree: 有幾個edge連在vertex上 Digraph中 又可分為in-degree and out-degree in-degree: 進入vertex的edge數 out-degree: 出去vertex的edge數 degree=in-degree+out-degree 一個degree=0的vertex可稱為isolated Edge數和degree的關係: 1 2 3 4 5 6 𝑒= 𝑖=0 𝑛−1 𝑑 𝑖 2

路徑 (path) Path: 一條從u到v的path, 是一連串的vertices, 𝑢, 𝑖 1 , 𝑖 2 ,…, 𝑖 𝑘 ,𝑣, 而且 𝑢, 𝑖 1 , 𝑖 1 , 𝑖 2 ,…, 𝑖 𝑘−1 , 𝑖 𝑘 , ( 𝑖 𝑘 ,𝑣)都是edge. (digraph的定義自行類推) 如果有一條path p從u到u’, 則我們說u’ is reachable from u via p. Path的length: 裡面有幾條edge Simple path: 除了u, v(起點和終點)以外, 其他的vertices都沒有重複過. Cycle: 一個u和v一樣的simple path Subpath:?? 答案: 定義path的vertex sequence裡面的連續的一段. 2 1 3

有連接的(connected) 半獸人 2 1 4 3 5 1 2 4 5 3 In undirected graph: 半獸人 2 1 4 In undirected graph: Vertices u and v are said to be connected iff there is a path from u to v. (graph & digraph) Connected graph: iff every pair of distinct vertices u and v in V(G) is connected Connected component (也有人直接叫component): A maximal connected subgraph Maximal: no other subgraph in G is both connected and contains the component. 問: Tree是一個怎麼樣的graph? 答: connected and acyclic (沒有cycle) graph 問: Forest是一個怎麼樣的graph? 答: acyclic graph 3 5 1 2 4 5 3

強連接(strongly connected) 強獸人 In digraph: Strongly connected: G is strongly connected iff for every pair of distinct vertices u and v in V there is a directed path from u to v and also a directed path from v to u. Strongly connected component: A maximal subgraph which is strongly connected. 1 2 3 4 5 6

要怎麼表示一個graph呢? 主流表示法: Adjacency matrix (用array) Adjacency lists (用linked list) 兩者都可以表示directed & undirected graph

表示法I 用Array 本方法叫做adjacency matrix index當作vertex號碼 edge用matrix的值來表示: 1 2 3 本方法叫做adjacency matrix index當作vertex號碼 edge用matrix的值來表示: 如果有(i,j)這條edge, 則a[i][j]=1, a[j][i]=1. (graph) 如果有<i,j>這條edge, 則a[i][j]=1. (digraph) 對undirected graph, 𝑎= 𝑎 𝑇 (也就是對對角線對稱) 請同學解釋要怎麼建adjacency matrix 粉簡單. 那麼來看看好不好用: 如果要看總共有多少條edge? O(??) 答: 𝑂( 𝑉 2 ) 有沒有可能跟edge數(e)成正比呢? 通常 𝐸 ≪ 𝑉 2 所以adjacency matrix裡面很空 4 5 6

表示法II 用linked list 本方法叫做adjacency lists 建立一個list array a[n] (n為vertex數目) 每個list裡面紀錄通往別的vertex的edge 問: 怎麼算in-degree? 答: 如果要比較容易的話, 要另外建”inverse adjacency lists” 請同學告訴我怎麼畫 1 2 [0] 1 3 4 5 [1] 3 4 [2] [3] 4 [4] 3 [5] 2

Weighted Edge Edge可以有”weight” 表示長度, 或者是需要花費 一個edge有weight的graph 3 Edge可以有”weight” 表示長度, 或者是需要花費 一個edge有weight的graph 又叫做network 想想看: 用剛剛的representation要怎麼儲存weight? 答: adjacency matrix可以用array的值來存 adjacency list可以在list node裡面多開一個欄位存 1 2 3 4 2 5 2 3 4 5 1

兩者比較 Adjacency lists: 用來表示sparse graphs時使用比較少空間 使用空間: 𝑂( 𝑉 +|𝐸|) Adjacency matrix: 要找某個edge (u,v)有沒有在graph裡面比較快 一個entry只需要1 bit (unweighted graph) 簡單容易, graph小的時候用adjacency matrix比較方便 使用空間: 𝑂( 𝑉 2 )

Breadth-First Search (BFS) 給一個graph G=(V,E)及一個source vertex s 找出所有從s reachable的vertices 計算從s到每一個reachable的vertex的最少edge數目 產生breadth-first tree, s為root, 而其他reachable的vertices都在樹裡面 Directed graph & undirected graph皆可 此方法會先找到所有距離s distance為k的vertex, 然後再繼續找距離為k+1的vertex

BFS Pseudo-code v.color: 用顏色來區別discover的狀況 WHITE: 還沒discovered GRAY: discovered了, 但是和該vertex相連的鄰居還沒有都discovered BLACK: discovered了且和該vertex相連的鄰居都已discovered v.d: 和root的距離 v.pi: 祖先 (predecessor) BFS(G,s) for each vertex 𝑢∈𝐺.𝑉−{𝑠} u.color=WHITE u.d=∞ u.pi=NIL s.color=GRAY s.d=0 s.pi=NIL Q={} ENQUEUE(Q,s) while Q!={} u=DEQUEUE(Q) for each 𝑣∈G.Adj[u] if v.color==WHITE v.color=GRAY v.d=u.d+1 v.pi=u ENQUEUE(Q,v) u.color=BLACK 初始所有vertex的值 初始開始search的vertex s的值 對每一個和u相連vertex

BFS Pseudo-code 𝑂(𝑉) 𝑂(𝑉+𝐸) 𝑂(𝐸) BFS(G,s) for each vertex 𝑢∈𝐺.𝑉−{𝑠} u.color=WHITE u.d=∞ u.pi=NIL s.color=GRAY s.d=0 s.pi=NIL Q={} ENQUEUE(Q,s) while Q!={} u=DEQUEUE(Q) for each 𝑣∈G.Adj[u] if v.color==WHITE v.color=GRAY v.d=u.d+1 v.pi=u ENQUEUE(Q,v) u.color=BLACK 𝑂(𝑉) 𝑂(𝑉+𝐸) 𝑂(𝐸)

證明BFS可以找到最短路徑 定義: 𝛿(𝑠,𝑣): s到v的最短路徑的長度(邊的數目) Lemma 22.1: G=(V,E)是一個directed或undirected graph. s是一個任意vertex. 則對任何edge 𝑢,𝑣 ∈𝐸, 𝛿 𝑠,𝑣 ≤𝛿 𝑠,𝑢 +1. 證明: 如果從s開始, u是reachable, 那麼v也是. 這個狀況下, sv的最短路徑只可能比𝛿 𝑠,𝑢 +1短 (最短路徑可能不經由u過來).不等式成立. 如果u不是reachable的話, 那麼不等式一定成立. su最短路徑 s 𝛿 𝑠,𝑢 u v 𝛿 𝑠,𝑣 可能有不經u的sv最短路徑

證明BFS可以找到最短路徑 Lemma 22.2: G=(V,E)是一個directed或undirected graph. 對G及vertex s跑BFS. 則結束的時候, 每一個𝑣∈𝑉, BFS計算的𝑣.𝑑≥𝛿(𝑠,𝑣). 證明: 使用歸納法證明. 假設為”每一個𝑣∈𝑉, BFS計算的𝑣.𝑑≥𝛿(𝑠,𝑣)”. 一開始把s丟進queue的時候, 成立. 𝑠.𝑑=𝛿 𝑠,𝑠 =0. 而其他的vertex 𝑣.𝑑=∞>𝛿(𝑠,𝑣). (起始條件) 當找到由edge (u,v)找到vertex v時, 我們可以假設𝑢.𝑑≥𝛿(𝑠,𝑢). (k的時候成立) 且我們知道𝑣.𝑑=𝑢.𝑑+1≥𝛿 𝑠,𝑢 +1≥𝛿(𝑠,𝑣). (證出k+1的時候成立) 每個v都只做以上步驟(更改v.d值)一次, 歸納法證明完成. Lemma 22.1

BFS用的queue 證明BFS可以找到最短路徑 𝑢 𝑣 1 𝑣 2 𝑣 3 … 𝑣 𝑟 𝑣 𝑟+1 u v Lemma 22.3: 假設BFS執行在G=(V,E)上, queue裡面有以下vertices 𝑣 1 , 𝑣 2 ,…, 𝑣 𝑟 , 𝑣 1 是queue的頭, 而 𝑣 𝑟 是queue的尾. 則 𝑣 𝑟 .𝑑≤ 𝑣 1 .𝑑+1 and 𝑣 𝑖 .𝑑≤ 𝑣 𝑖+1 .𝑑 for 𝑖=1,2,…,𝑟−1. 證明: 使用歸納法. 當queue一開始裡面只有s的時候成立. (起始條件) 現在我們必須證明每次dequeue或enqueue的時候, 都還是成立. (k的時候) (k+1的時候) (1) dequeue的時候, 𝑣 2 變成新的queue頭. 但 𝑣 1 .𝑑≤ 𝑣 2 .𝑑. 且 𝑣 𝑟 .𝑑≤ 𝑣 1 .𝑑+1≤ 𝑣 2 .𝑑+1.其他不等式都不變. 因此成立. (2) enqueue的時候, 新加入的vertex v變成 𝑣 𝑟+1 . 此時我們剛剛把u拿掉(當時是queue的頭). 所以應該𝑢.𝑑≤ 𝑣 1 .𝑑. 所以 𝑣 𝑟+1 .𝑑=𝑣.𝑑=𝑢.𝑑+1≤ 𝑣 1 .𝑑+1. 且 𝑣 𝑟 .𝑑≤𝑢.𝑑+1, so 𝑣 𝑟 .𝑑≤𝑢.𝑑+1=𝑣.𝑑= 𝑣 𝑟+1 .𝑑. 其他的不等式都不變, 因此成立.

證明BFS可以找到最短路徑 Corollary 22.4: vertices 𝑣 𝑖 和 𝑣 𝑗 在執行BFS時被enqueue且 𝑣 𝑖 在 𝑣 𝑗 之前被enqueue. 則當 𝑣 𝑗 被enqueue的時候 𝑣 𝑖 .𝑑≤ 𝑣 𝑗 .𝑑. 證明: 直接從Lemma 22.3就可以得到. 因為v.d只會被指定值一次(enqueue之前).

證明BFS可以找到最短路徑 Theorem 22.5: 證明BFS正確性. BFS執行在G=(V,E)上, 從𝑠∈𝑉開始. BFS執行的時候會找出所有從s reachable的vertex 𝑣∈𝑉. 結束的時候, 每個𝑣.𝑑=𝛿 𝑠,𝑣 , ∀𝑣∈𝑉. 證明: (反證法)假設有一些v.d不是𝛿(𝑠,𝑣). 讓v是其中𝛿(𝑠,𝑣)最小的一個. Lemma 22.2說 𝑣.𝑑≥𝛿 𝑠,𝑣 , 所以現在𝑣.𝑑>𝛿(𝑠,𝑣). 此時v一定是從s reachable, 不然𝛿 𝑠,𝑣 =∞≥v.d. 假設u是sv最短路徑上v的前一個vertex, 則𝛿 𝑠,𝑣 =𝛿 𝑠,𝑢 +1 (隱含意思: sv上最短路徑上su的部分也是su的最短路徑) 因為𝛿 𝑠,𝑢 <𝛿(𝑠,𝑣), 所以𝑢.𝑑=𝛿(𝑠,𝑢) (已經假設v是其中𝛿(𝑠,𝑣)最小的一個). 𝑣.𝑑>𝛿 𝑠,𝑣 =𝛿 𝑠,𝑢 +1=𝑢.𝑑+1 s 𝛿 𝑠,𝑢 u sv最短路徑 v 𝛿 𝑠,𝑣

證明BFS可以找到最短路徑 上頁得到𝑣.𝑑>𝛿 𝑠,𝑣 =𝛿 𝑠,𝑢 +1=𝑢.𝑑+1 考慮BFS從Queue裡面把u dequeue出來的時候. u的鄰居v們, 可能是WHITE, GRAY, 或BLACK 如果是WHITE, 則會設𝑣.𝑑=𝑢.𝑑+1, 矛盾. 如果是BLACK, 則它之前已經被dequeue過. Corollary 22.4說𝑣.𝑑≤𝑢.𝑑, 矛盾. 如果是GRAY, 則它是剛剛dequeue某個vertex w的時候被改成GRAY的(比u dequeue的時間早). 所以𝑣.𝑑=𝑤.𝑑+1. 但 Corollary 22.4說𝑤.𝑑≤𝑢.𝑑, 因此𝑣.𝑑=𝑤.𝑑+1≤𝑢.𝑑+1, 矛盾. 因此原假設不成立.證明完畢.

下課休息

下課休息

Today’s Reading Assignment Cormen B.4 (Appendix) and 22.1-22.2