• 沒有找到結果。

Graph Algorithms Euler Circuit Hamilton Circuit

N/A
N/A
Protected

Academic year: 2022

Share "Graph Algorithms Euler Circuit Hamilton Circuit"

Copied!
50
0
0

加載中.... (立即查看全文)

全文

(1)

Graph Algorithms Euler Circuit Hamilton Circuit

for Sprout 2014 by Chin Huang Lin

(2)

七橋問題 七橋問題

• 柯尼斯堡有七座橋,風光明媚,景色迷人

• 如果可以安排一條旅遊路線,恰好把七座橋都經過一次,那就不 腳痠不無聊,一路順暢身心富足

• 只是,一直都沒有人找到滿足要求的路線

From Wikipedia

(3)

轉成圖論問題的話……

轉成圖論問題的話……

• 給定一個無向圖,是否存在一條每條邊恰走過一次的路徑?

From Wikipedia

(4)

一筆畫問題!

一筆畫問題!

• 一筆畫問題有分成兩種:

• 一種形成一條路徑,稱為 Euler path

• 一種形成一個環,稱為 Euler circuit

(5)

觀察一下 觀察一下

• 顯然至少所有的邊要互相連通

• 按照路徑經過的方向,可以把無向邊有向化,分成入度與出度

• 不難發現,除了起點與終點以外,所有的點的入度數一定要與出 度數相同!

• 如果入度 > 出度,代表有進去卻沒出來的情況,那麼該點應該是終點

• 如果出度 > 入度,代表有莫名無中生有的情況,那麼該點應該是起點

• 入度與出度相同,也就是說原先的無向圖上一定度數為偶數

• 以上是必要條件

(6)

驗證一下 驗證一下

• 除了起點與終點外,所有的點度數都為偶數

→ 整張圖上只能有 0 個或 2 個偶點

• 這樣是否足夠充分呢?

• Yes!

• 底下我們用簡單的數學歸納法來給出構造性證明

(7)

驗證一下 驗證一下

• 遞迴證明法!

• 當邊數只有 0 或者 1 時,結論顯然成立

• 假設邊數 時成立,那麼對於一個邊數為 的圖……

• 假設 是偶數 ( 此時沒有奇點 ) ,那麼圖上必定存在環 。把 自圖上 移除後,由於任意點都只會移除偶數度,剩餘圖必定形成所有點度數仍 為偶數的若干連通塊。

• 由於 時成立,剩餘的每個連通塊都存在歐拉迴路。

• 把各個連通塊的歐拉迴路都「接在」與 的共同節點上,即形成原圖的 歐拉迴路

•  

(8)

驗證一下 驗證一下

From DJWS

(9)

驗證一下 驗證一下

• 遞迴證明法!

• 當邊數只有 0 或者 2 時,結論顯然成立

• 假設邊數 時成立,那麼對於一個邊數為 的圖……

• 假設 是奇數 ( 此時有二奇點 ) ,那麼先在兩奇點之間新增一假想邊 形成圖 ,接著一樣在圖上選擇一個環 移除

• 因為環上邊數至少為 2 ,,又可以遞迴求解了!

• 完成 的歐拉迴路後,把 e 移除,並且選擇兩奇點作為起點終點即可

•  

(10)

實作時間 實作時間

• 在證明中我們可以看到,其實 怎麼選,根本就不重要!

• 只要起點、終點選對,其實我們隨便走也可以!

• 走到山窮水盡,就代表一個 ( 有可能包含虛擬邊 ) ;接著遞 迴把剩下的部份的歐拉路「黏」到 上即可

•  

(11)

算法框架 算法框架

1. 判斷奇點個數,若

• ,那麼無解

• ,則選擇其中一個奇點作為起點

• ,則選擇任意一個點作為起點

2. 在 DFS 框架內執行下列步驟

1) 若當前節點還有尚未走過的邊,那麼拜訪該邊,並在拜訪完後輸出該邊 2) 否則離開當前結點

3. 若還有節點尚未拜訪,則無解 4. 否則輸出順序即為一組解

•  

(12)

Show time!

Show time!

2 1

3 4

5 6 7

8 9

12 10 11

15

16

13 14

(13)

Show time!

Show time!

2 1

3 4

5 6 7

8 9

12 10 11

15

16

13 14

1

(14)

Show time!

Show time!

2 1

3 4

5 6 7

8 9

12 10 11

15

16

13 14

1 2

(15)

Show time!

Show time!

2 1

3 4

5 6 7

8 9

12 10 11

15

16

13 14

1 2 6

(16)

Show time!

Show time!

2 1

3 4

5 6 7

8 9

12 10 11

15

16

13 14

1 2 6 5

(17)

Show time!

Show time!

2 1

3 4

5 6 7

8 9

12 10 11

15

16

13 14

1 2 6 5 4

(18)

Show time!

Show time!

2 1

3 4

5 6 7

8 9

12 10 11

15

16

13 14

1 2 6 5 4 3

(19)

Show time!

Show time!

2 1

3 4

5 6

8 9

12 10 11

15

16

13 14

7

1 2 6 5 4 3 7

(20)

Show time!

Show time!

2 1

3 4

5 6

8 9

12 10 11

15

16

13 14

7

1 2 6 5 4 3 7 8

(21)

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

13 14

7

1 2 6 5 4 3 7 8

9

(22)

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

13

14

9

7

1 2 6 5 4 3 7 8

(23)

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

13

14

9 8

7

1 2 6 5 4 3 7

(24)

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

13

14

9 8 7

7

1 2 6 5 4 3

(25)

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

13

14

9 8 7 3

7

1 2 6 5 4

(26)

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

13

14

9 8 7 3 4

7

1 2 6 5

(27)

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

13

14

9 8 7 3 4 5

7

1 2 6

(28)

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

13

14

9 8 7 3 4 5

7

1 2 6 10

(29)

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

13

14

9 8 7 3 4 5

7

1 2 6 10 11

(30)

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

13

14

9 8 7 3 4 5

7

1 2 6 10 11 12

(31)

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

13

14

9 8 7 3 4 5 12

7

1 2 6 10 11

(32)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12

7

14

1 2 6 10 11 14

(33)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12

7

14

1 2 6 10 11 14 13

(34)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12

7

14

1 2 6 10 11 14 13 16

(35)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12

7

14

1 2 6 10 11 14 13 16

15

(36)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12 15

7

14

1 2 6 10 11 14 13 16

(37)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12 15 16

7

14

1 2 6 10 11 14 13

(38)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12 15 16 13

7

14

1 2 6 10 11 14

(39)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12 15 16 13 14

7

14

1 2 6 10 11

(40)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12 15 16 13 14 11

7

14

1 2 6 10

(41)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12 15 16 13 14 11 10

7

14

1 2 6

(42)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12 15 16 13 14 11 10 6

7

14

1 2

(43)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12 15 16 13 14 11 10 6 2

7

14

1

(44)

13

9

Show time!

Show time!

2 1

3 4

5 6

8

12 10 11

15

16

9 8 7 3 4 5 12 15 16 13 14 11 10 6 2 1

7

14

(45)

有向圖的話……

有向圖的話……

• 在無向圖中,我們事實上是根據我們的需求自己幫邊定向

• 有向圖中,如果先天條件不良,我們就無能為力了

• 入點:出度數 = 入度數 – 1

• 出點:出度數 = 入度數 + 1

• 平衡點:出度數 = 入度數

• 不能有三種點以外的點

• 入點、出點都最多只能有一個

• 其餘點皆須為平衡點

(46)

有向圖的話……

有向圖的話……

• 如果整張圖連通 ( 從起點開始可以走到任意一點 ) ,那麼解的 存在性證明與無向圖完全相似

• 不同的是,在無向圖的算法中,輸出的順序之所以可以成立,來 自於「任意無向圖上的路徑逆序輸出依然合法」

• 有向圖中,把輸出逆序後才是一組合法的解

• 複雜度:皆為

•  

(47)

哈密頓問題 哈密頓問題

• 目標為點的一筆畫問題!

• 給定一張圖 ( 有向或無向 ) ,是否存在一條路徑使得所有節點 恰好走過一次呢?

• 如果最後不用回到起點,則稱之為 Hamilton path

• 否則稱之為 Hamilton circuit

• 若一張圖中存在 Hamilton circuit ,則稱此圖為 Hamilton graph

• 圖上的點和邊關係密切,歐拉路問題有這麼好的解,是否可以套 用到哈密頓問題上呢?

(48)

Terrible Terrible

• 很遺憾地,不論是有向圖還是無向圖,哈密頓問題都已經被證明 是 NP-complete

• 目前僅知一個充分條件:

• 設 是一個無向簡單圖,。若對於任意的兩個頂點 都有 ,則 是 Ham ilton graph

(proved by Øystein Ore)

• 但這並不代表我們只能夠用 暴力求解

•  

(49)

Dynamic Programming!

Dynamic Programming!

• 反正每個點走過之後就不會走第二次,對應著邊也不會有走兩次 的情形

• 只有「已經走過的點」和「當前走過的點」是重要的事情!

• 定義狀態 為「是否有可能當前在點 ,其中 這個集合已經拜 訪過」

•  

(50)

Dynamic Programming!

Dynamic Programming!

• 初始時 ,其餘皆為

• 對於一個狀態 ,如果 且 ,那麼我們可以從 走到 ,轉移到

• 其中 通常以狀態壓縮實作

• ex. ,則可以用 表示

• 若使用 adjacent matrix 存邊方式,則每個狀態只需要 轉移

• 反正 沒辦法太大,不用考慮空間 的問題 :p

• 時間複雜度為

•  

參考文獻

相關文件

circuit sat: Given a circuit, is there a truth assignment such that the circuit outputs truea. • circuit sat ∈ NP: Guess a truth assignment and then evaluate

Vacuum circuit breakers, for a voltage exceeding 1,000 volts but less than 72.5 kv 歐洲商會.

• Table 25.4 shows the usual symbols used in circuit diagrams... Resistors are color-coded for easy

[r]

• 在一台每秒可進行

The design of a sequential circuit with flip-flops other than the D type flip-flop is complicated by the fact that the input equations for the circuit must be derived indirectly

Algorithm Design Methods Divide & Conquer for Sprout 2014

Graph Algorithms Euler Circuit Hamilton Circuit.. for Sprout 2014 by Chin