algo 23 mstp

31
株式会社チョイスタジオ 〒606-8225 京都府京都市左京区田中門前町46 京美華ビル3階 TEL : 075-724-4400 Email : info@choistudio.jp アルゴリズムイントロダクション 23 最小全域木 minimum‐spanning‐tree Problem 2009/06/08 id:tksmd

Upload: takashi-someda

Post on 04-Jul-2015

1.587 views

Category:

Technology


1 download

DESCRIPTION

アルゴリズムイントロダクション 23 章輪講資料

TRANSCRIPT

Page 1: Algo 23 MSTP

株式会社チョイスタジオ 〒606-8225 京都府京都市左京区田中門前町46 京美華ビル3階 TEL : 075-724-4400 Email : info@choistudio.jp

アルゴリズムイントロダクション 23 章 

最小全域木 minimum‐spanning‐tree Problem 

2009/06/08 id:tksmd

Page 2: Algo 23 MSTP

自己紹介

•  染田貴志 (id:tksmd) – チョイスタジオ@百万遍で、もそもそしています。 –  i戦士(isenshi.com) という開発チームの一員です。 

–  Seasar FoundaCon で開発しています。 –  融点というバンドでオルガンを弾いてます。 

•  Related Works – Choistudy (hHp://www.choistudy.jp/) –  Tuigwaa/escafeWeb (hHp://www.escafe.org/) –  Cubby (hHp://cubby.seasar.org/) –  融点 on MySpace (hHp://www.myspace.com/u10asia90) 

一番最近のは。。。。

Page 3: Algo 23 MSTP

23章のお題

•  構成 – 導入 (最小全域木とは) 

– 成長法による最小全域木の構成 – クラスカルとプリムのアルゴリズム 

•  クラスカルのアルゴリズム 

• プリムのアルゴリズム 

最小全域木を求める問題  (Minimum Spanning Tree Problem)  

を解くアルゴリズム

Page 4: Algo 23 MSTP

全域木

•  全域木 (Spanning Tree) – 無向連結グラフが与えられたとき、全ての点を結合する閉路を含まない辺の集合 

Page 5: Algo 23 MSTP

最小全域木

•  最小全域木 (Minimum Spanning Tree) – 各辺に重みが与えられた時に、その重みの総和が最小であるような全域木 

– 与えられたグラフによっては、複数存在しうる 

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

w(T) = w(u,v) =(u,v )∈T∑ 37

Page 6: Algo 23 MSTP

最小全域木

•  これも同一グラフに対する最小全域木 

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

w(T) = w(u,v) =(u,v )∈T∑ 37

Page 7: Algo 23 MSTP

最小全域木

•  辺の重みが全て異なる場合はこれだけ 

a

b

h g

e

d

f

c

i 11

3

8

9

1

12

7

6

2

13 14

10

4

w(T) = w(u,v) =(u,v )∈T∑ 37

5

Page 8: Algo 23 MSTP

余談

•  STP (Spanning Tree Protocol) – LANにおいてループ構成(=閉路)を回避するための通信プロトコル 

– 冗長性の確保 

– 各スイッチがルートブリッジに向けて最小のパスコストで到達出来るルートを選択する 

最短経路木を求める問題

Page 9: Algo 23 MSTP

記号の定義

G = (V ,E) (u,v)∈ E

w(T) = w(u,v)(u,v )∈T∑ (T ⊂ E)

A ⊆ T

• 無向グラフ • 目的関数 

• 部分集合 

Page 10: Algo 23 MSTP

成長法による最小全域木の構成

•  基本的な考え方 – 全域木を構成していく、ある段階での辺の部分集合に着目する 

– その部分集合にある辺を一つ加えて、全域木を成長させる 

– その辺の選択で「貪欲」な戦略をとる 

Page 11: Algo 23 MSTP

成長法による最小全域木の構成

GENERIC - MST(G,w)1 A←∅

2 while A ≠MST3 do find safe edge (u,v) for A4 A← A∪{(u,v)}5 return A

Page 12: Algo 23 MSTP

成長法による最小全域木の構成

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

T = {(a,b),(b,c),(c,d),(c, f ),(c,i),(d,e),( f ,g),(g,h)}

A = {(c,i),( f ,g),(g,h)}

A = {(c,i),(c, f ),( f ,g),(g,h)}

Page 13: Algo 23 MSTP

成長法による最小全域木の構成

•  維持する条件 

ループ直前において A はある最小全域木の部分集合

ループ内では、それを加える事によって 

上記を満たすような「安全な辺」を探し、 これまでの部分集合に加える

Page 14: Algo 23 MSTP

成長法による最小全域木の構成

•  「安全な辺」の求め方 – 定理 23.1 より 

– A を侵害しない、G の任意のカット (S,V-S) を設定 

–  (S,V-S) と交差する任意の軽い辺を (u,v) とすると、これが安全な辺 

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4 €

A = {(c,i),( f ,g),(g,h)}

S↑

V-S↓

Page 15: Algo 23 MSTP

成長法による最小全域木の構成

•  「安全な辺」の求め方 (続) – 系 23.2 

– 森 GA = (V,A) の任意の連結成分を C = (VC,EC)  – C と GA を連結する辺 (u,v) が軽い辺ならば、

(u,v) は A に対して安全 

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4 €

A = {(c,i),( f ,g),(g,h)}

Page 16: Algo 23 MSTP

成長法による最小全域木の構成

•  ポイント – 「安全な辺」を部分集合に加えるという選択を繰り返し最小全域木を得る 

– 「安全な辺」は、その時点での部分集合に、それを侵害しない任意のカットに対する軽い辺を選べばよい 

Page 17: Algo 23 MSTP

クラスカルとプリムのアルゴリズム

•  代表的なアルゴリズム – クラスカルのアルゴリズム 

– プリムのアルゴリズム 

•  各アルゴリズムの味噌 – 育て方の基本戦略 

– 利用するデータ構造 – 計算量 

Page 18: Algo 23 MSTP

クラスカルのアルゴリズム

•  基本戦略 – 最初に重みにより辺集合をソートする – 森を連結していき、最終的に木となる 

MST −KRUSKAL(G,w)1 A←∅

2 for each v ∈ V[G] 3 do MAKE - SET(v)4 sort E with weight w ascending order5 for each (u,v)∈ E (with sorting order)6 do if FIND - SET(u) ≠ FIND - SET(v)7 then A← A∪{(u,v)}8 UNION(u,v)9 return A

Page 19: Algo 23 MSTP

クラスカルのアルゴリズム

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

1. 最小の辺からスタート

2. 辺の重みの昇順に処理

Page 20: Algo 23 MSTP

クラスカルのアルゴリズム

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

3. 閉路を構成する場合は     たとえ重み最小でも処理     しない

4. 最小全域木を構成したら     終了

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

Page 21: Algo 23 MSTP

クラスカルのアルゴリズム

•  雰囲気 – 重み最小の辺の周辺から、森の成長がはじまり、それがのそのそとくっついていく 

•  データ構造 – 互いに疎な集合の森 (disjoint‐set forest) で、ノード集合を管理 •  m 回の MAKE‐SET と n 回の MAKE‐SET/UNION/FIND‐SET の計算量が O(mα(n))

Page 22: Algo 23 MSTP

クラスカルのアルゴリズム

•  計算量 – 初期化 O(V) – ソート O(E lg E) – ループ  •  O((V+E)α(V)) (|E|>=|V|-1) •  = O(Eα(V)) (α(|V|)=O(lg V)=O(lg E)) •  = O(E lg E) (|E|<|V|2)

•  = O(E lg V)

Page 23: Algo 23 MSTP

プリムのアルゴリズム

•  基本戦略 – 指定されたノードから、最も重みの少ない頂点への辺を加え木を育てて行く 

MST − PRIM(G,w,r) 1 for each u∈ V[G] 2 do key[u]←∞

3 π[u]← NIL 4 key[r] = 0 5 Q←V[G] 6 while Q ≠∅

7 do u← EXTRACT - MIN(Q) 8 for each v ∈ Adj[u] 9 do if v ∈ Q and w(u,v) < key[v]10 then π[v]← u11 key[v]← w(u,v)

A = {(v,π (v)) : v ∈ V −{r}}

Page 24: Algo 23 MSTP

プリムのアルゴリズム

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

1.  指定ノードからスタート 

2. 最小の重みに進む

Page 25: Algo 23 MSTP

プリムのアルゴリズム

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

3. 既に追加されているノードへ     は処理対象にはならない

4. 最小全域木を構成したら     終了

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

Page 26: Algo 23 MSTP

プリムのアルゴリズム

•  雰囲気 – 指定ノードからぞわぞわ木が育っていく – 直感的に最小全域木が作られてるっぽい 

•  データ構造 – 二分ヒープ •  BUILD‐MIN‐HEAP O(n) •  EXTRACT‐MIN O(lg n) •  DECREASE‐KEY O(lg n)

Page 27: Algo 23 MSTP

プリムのアルゴリズム

•  計算量 – 初期化 O(V) – 全 EXTRACT‐MIN 操作 O(V lg V) – 隣接点の処理 O(E lg V) – よって O(V lg V + E lg V)

Page 28: Algo 23 MSTP

プリムのアルゴリズム

•  フィボナッチヒープの場合 – 初期化 O(V) – 全 EXTRACT‐MIN 操作 O(V lg V) – 隣接点の処理 O(E) – よって O(V lg V + E)

Page 29: Algo 23 MSTP

疎な場合の前処理 (23-2)

a

b

h g

e

d

f

c

i 11

4

8

9

1

7

7

2

8

2

6 14

10

4

ab

fgh

cdei

8 4

8

1.  各ノードの最小重み の辺をピックアップ 

2. 縮約したグラフに      MST‐PRIM 

Page 30: Algo 23 MSTP

その他のアルゴリズム

•  ブルーフカ法 – 重みが全て異なるグラフを前提 

– O(E lg V)

•  Reverse‐DeleCon 法 – クラスカル法の逆 – 最初に全ての辺を含むグラフからはじめ、重みの大きい辺から削除していく 

– O(E lg E (lg lg E)3)

Page 31: Algo 23 MSTP

まとめ

•  最小全域木問題 – 貪欲戦略で最適解を得ることが出来る – クラスカル法 • 森を育てて最終的に MST を得る 

•  O(E lg V) – プリム法 •  ノードを指定し、枝をのばし最終的に MST を得る 

•  O(E lg V) • ただしフィボナッチヒープを用いて、ならし解析すると O(E+V lg V)