graph 1

30
GRAPH 1 Michael Tsai 2012/4/24 連連 : 連連連連連連連連連連 http://www.wretch.cc/blog/chi771027/264899

Upload: casper

Post on 05-Jan-2016

61 views

Category:

Documents


1 download

DESCRIPTION

連載 : 學生上課睡覺姿勢大全. 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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Graph 1

GRAPH 1Michael Tsai2012/4/24

連載 : 學生上課睡覺姿勢大全http://www.wretch.cc/blog/chi771027/26489957

Page 2: Graph 1

2

Königsberg Seven Bridge Problem

• 西元 1736 年 , Euler 嘗試著要解答這個問題 :

• 右邊地圖中 , 有沒有可能找出一條路徑 , 使得每一條橋都走過一次之後又回到出發點 ?

答案: Graph必須要是connected & 必須有0個或2個node有odd degree

Page 3: Graph 1

3

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)}

0

3

1 2

Page 4: Graph 1

4

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>}

0

3

1 2

註 : 課本裡面 digraph 也使用 () 小括號 , 不過我比較喜歡用 <> 角括號來表示 digraph 的 edge, 覺得這樣比較清楚 .

Page 5: Graph 1

5

Self Edge & Multigraph

0

3

1 2

0

3

1 2

Graph with self-edges<v,v>

Multigraph

Page 6: Graph 1

6

Maximum number of edges• 一個有 n vertices 的 graph, 最多有幾個 edges?• 一個有 n vertices 的 digraph, 最多有幾個 edges?

• 答案 : graph: , • digraph:

Page 7: Graph 1

7

怎麼這麼多名詞 XD• 相鄰 (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, 則且

0

3

1 2

Page 8: Graph 1

8

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

Page 9: Graph 1

9

路徑 (path)• Path: 一條從 u 到 v 的 path, 是一連串的 vertices, , 而且都是

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 裡面的連續的一段 .

0

3

1 2

Page 10: Graph 1

10

有連接的 (connected)• 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

0

3

1 2

5

4

3

1 2

5

4

半獸人

Page 11: Graph 1

11

強連接 (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

強獸人

Page 12: Graph 1

12

要怎麼表示一個 graph 呢 ?• 主流表示法 :• Adjacency matrix ( 用 array)• Adjacency lists ( 用 linked list)

• 兩者都可以表示 directed & undirected graph

Page 13: Graph 1

13

表示法 I 用 Array• 本方法叫做 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(??)• 答 : • 有沒有可能跟 edge 數 (e) 成正比呢 ? • 通常 所以 adjacency matrix 裡面很空

1 2 3

4 5 6

Page 14: Graph 1

14

表示法 II 用 linked list• 本方法叫做 adjacency lists• 建立一個 list array a[n] (n 為 vertex 數目 )• 每個 list 裡面紀錄通往別的 vertex 的 edge• 問 : 怎麼算 in-degree?

• 答 : 如果要比較容易的話 , 要另外建” inverse adjacency lists”• 請同學告訴我怎麼畫

0 1 2

3 4 5[0]

[1]

[2]

[3]

[4]

[5]

1

3 4

2

0 4

3

Page 15: Graph 1

15

Weighted Edge• Edge 可以有” weight”• 表示長度 , 或者是需要花費• 一個 edge 有 weight 的 graph• 又叫做 network

• 想想看 : 用剛剛的 representation 要怎麼儲存 weight?• 答 : • adjacency matrix 可以用 array 的值來存• adjacency list 可以在 list node 裡面多開一個欄位存

0 1 2

3 4 5

3

4 2

1

23 5

Page 16: Graph 1

16

兩者比較• Adjacency lists: • 用來表示 sparse graphs 時使用比較少空間• 使用空間 :

• Adjacency matrix: • 要找某個 edge (u,v) 有沒有在 graph 裡面比較快• 一個 entry 只需要 1 bit (unweighted graph)• 簡單容易 , graph 小的時候用 adjacency matrix 比較方

便• 使用空間 :

Page 17: Graph 1

17

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

Page 18: Graph 1

18

BFS Pseudo-codeBFS(G,s)for each vertex

u.color=WHITEu.d=u.pi=NIL

s.color=GRAYs.d=0s.pi=NILQ={}ENQUEUE(Q,s)while Q!={}

u=DEQUEUE(Q)for each G.Adj[u]

if v.color==WHITEv.color=GRAYv.d=u.d+1v.pi=uENQUEUE(Q,v)

u.color=BLACK

v.color: 用顏色來區別 discover的狀況 WHITE: 還沒 discovered GRAY: discovered 了 , 但是和該 vertex 相連的鄰居還沒有都 discovered BLACK: discovered 了且和該vertex 相連的鄰居都已discovered

v.d: 和 root 的距離

v.pi: 祖先 (predecessor)

初始所有 vertex 的值

初始開始 search 的 vertex s 的值

對每一個和 u 相連 vertex

Page 19: Graph 1

19

Page 20: Graph 1

20

Page 21: Graph 1

21

BFS Pseudo-codeBFS(G,s)for each vertex

u.color=WHITEu.d=u.pi=NIL

s.color=GRAYs.d=0s.pi=NILQ={}ENQUEUE(Q,s)while Q!={}

u=DEQUEUE(Q)for each G.Adj[u]

if v.color==WHITEv.color=GRAYv.d=u.d+1v.pi=uENQUEUE(Q,v)

u.color=BLACK

𝑂 (𝐸)

𝑂 (𝑉 )

𝑂 (𝑉 +𝐸)

Page 22: Graph 1

22

證明 BFS 可以找到最短路徑• 定義 : s 到 v 的最短路徑的長度 ( 邊的數目 )

• Lemma 22.1: G=(V,E) 是一個 directed 或 undirected graph. s 是一個任意 vertex. 則對任何 edge , .

• 證明 : • 如果從 s 開始 , u 是 reachable, 那麼 v 也是 . • 這個狀況下 , sv 的最短路徑只可能比短 ( 最短路徑可能

不經由 u 過來 ). 不等式成立 .• 如果 u 不是 reachable 的話 , 那麼不等式一定成立 .s

v

u

su 最短路徑

可能有不經 u 的 sv 最短路徑

𝛿 (𝑠 ,𝑢)

𝛿 (𝑠 ,𝑣 )

Page 23: Graph 1

23

證明 BFS 可以找到最短路徑• Lemma 22.2: G=(V,E) 是一個 directed 或 undirected graph. 對 G 及 vertex s 跑 BFS. 則結束的時候 , 每一個 , BFS 計算的 .• 證明 : • 使用歸納法證明 . 假設為”每一個 , BFS 計算的” .• 一開始把 s丟進 queue 的時候 , 成立 . . 而其他的 vertex . ( 起始條件 )• 當找到由 edge (u,v) 找到 vertex v 時 , 我們可以假設 . (k

的時候成立 )• 且我們知道 . ( 證出 k+1 的時候成立 )• 每個 v 都只做以上步驟 (更改 v.d 值 ) 一次 , 歸納法證明完

成 .

Lemma 22.1

Page 24: Graph 1

24

證明 BFS 可以找到最短路徑• Lemma 22.3: 假設 BFS執行在 G=(V,E) 上 , queue 裡面有以下

vertices , 是 queue 的頭 , 而是 queue 的尾 . 則 and for .• 證明 :• 使用歸納法 . • 當 queue 一開始裡面只有 s 的時候成立 . ( 起始條件 )• 現在我們必須證明每次 dequeue 或 enqueue 的時候 , 都還是成立 .

(k 的時候 )• (k+1 的時候 )• (1) dequeue 的時候 , 變成新的 queue頭 . 但 . 且 . 其他不等式都

不變 . 因此成立 .• (2) enqueue 的時候 , 新加入的 vertex v變成 . • 此時我們剛剛把 u拿掉 ( 當時是 queue 的頭 ). 所以應該 . 所以 . • 且 , so .• 其他的不等式都不變 , 因此成立 .

BFS 用的 queue

𝑣2𝑣3…𝑣𝑟𝑣1 𝑣𝑟+1𝑢u

v

Page 25: Graph 1

25

證明 BFS 可以找到最短路徑• Corollary 22.4: vertices 和 在執行 BFS 時被 enqueue

且在之前被 enqueue. 則當被 enqueue 的時候 .• 證明 : 直接從 Lemma 22.3 就可以得到 . 因為 v.d 只會被指定值一次 (enqueue 之前 ).

Page 26: Graph 1

26

證明 BFS 可以找到最短路徑• Theorem 22.5: 證明 BFS 正確性 . BFS執行在 G=(V,E)

上 , 從開始 . BFS執行的時候會找出所有從 s reachable的 vertex . 結束的時候 , 每個 .

• 證明 : • ( 反證法 )假設有一些 v.d 不是 . 讓 v 是其中最小的一個 . • Lemma 22.2 說 , 所以現在 .• 此時 v 一定是從 s reachable, 不然 .• 假設 u 是 sv 最短路徑上 v 的前一個 vertex, 則• (隱含意思 : sv 上最短路徑上 su 的部分也是 su 的最

短路徑 )• 因為 , 所以 ( 已經假設 v 是其中最小的一個 ).

s

v

usv 最短路徑

𝛿 (𝑠 ,𝑢)

𝛿 (𝑠 ,𝑣 )

Page 27: Graph 1

27

證明 BFS 可以找到最短路徑• 上頁得到• 考慮 BFS 從 Queue 裡面把 u dequeue 出來的時候 .• u 的鄰居 v 們 , 可能是 WHITE, GRAY, 或 BLACK• 如果是 WHITE, 則會設 , 矛盾 .• 如果是 BLACK, 則它之前已經被 dequeue 過 . Corollary 22.4 說 , 矛盾 .• 如果是 GRAY, 則它是剛剛 dequeue 某個 vertex w 的時

候被改成 GRAY 的 ( 比 u dequeue 的時間早 ). 所以 . 但 Corollary 22.4 說 , 因此 , 矛盾 .• 因此原假設不成立 . 證明完畢 .

Page 28: Graph 1

28

下課休息

Page 29: Graph 1

29

下課休息

Page 30: Graph 1

30

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