algo 23 mstp
DESCRIPTION
アルゴリズムイントロダクション 23 章輪講資料TRANSCRIPT
![Page 1: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/1.jpg)
株式会社チョイスタジオ 〒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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/2.jpg)
自己紹介
• 染田貴志 (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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/3.jpg)
23章のお題
• 構成 – 導入 (最小全域木とは)
– 成長法による最小全域木の構成 – クラスカルとプリムのアルゴリズム
• クラスカルのアルゴリズム
• プリムのアルゴリズム
最小全域木を求める問題 (Minimum Spanning Tree Problem)
を解くアルゴリズム
![Page 4: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/4.jpg)
全域木
• 全域木 (Spanning Tree) – 無向連結グラフが与えられたとき、全ての点を結合する閉路を含まない辺の集合
![Page 5: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/5.jpg)
最小全域木
• 最小全域木 (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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/6.jpg)
最小全域木
• これも同一グラフに対する最小全域木
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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/7.jpg)
最小全域木
• 辺の重みが全て異なる場合はこれだけ
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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/8.jpg)
余談
• STP (Spanning Tree Protocol) – LANにおいてループ構成(=閉路)を回避するための通信プロトコル
– 冗長性の確保
– 各スイッチがルートブリッジに向けて最小のパスコストで到達出来るルートを選択する
最短経路木を求める問題
![Page 9: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/9.jpg)
記号の定義
€
€
G = (V ,E) (u,v)∈ E
w(T) = w(u,v)(u,v )∈T∑ (T ⊂ E)
A ⊆ T
• 無向グラフ • 目的関数
• 部分集合
![Page 10: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/10.jpg)
成長法による最小全域木の構成
• 基本的な考え方 – 全域木を構成していく、ある段階での辺の部分集合に着目する
– その部分集合にある辺を一つ加えて、全域木を成長させる
– その辺の選択で「貪欲」な戦略をとる
![Page 11: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/11.jpg)
成長法による最小全域木の構成
€
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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/12.jpg)
成長法による最小全域木の構成
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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/13.jpg)
成長法による最小全域木の構成
• 維持する条件
ループ直前において A はある最小全域木の部分集合
ループ内では、それを加える事によって
上記を満たすような「安全な辺」を探し、 これまでの部分集合に加える
![Page 14: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/14.jpg)
成長法による最小全域木の構成
• 「安全な辺」の求め方 – 定理 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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/15.jpg)
成長法による最小全域木の構成
• 「安全な辺」の求め方 (続) – 系 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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/16.jpg)
成長法による最小全域木の構成
• ポイント – 「安全な辺」を部分集合に加えるという選択を繰り返し最小全域木を得る
– 「安全な辺」は、その時点での部分集合に、それを侵害しない任意のカットに対する軽い辺を選べばよい
![Page 17: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/17.jpg)
クラスカルとプリムのアルゴリズム
• 代表的なアルゴリズム – クラスカルのアルゴリズム
– プリムのアルゴリズム
• 各アルゴリズムの味噌 – 育て方の基本戦略
– 利用するデータ構造 – 計算量
![Page 18: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/18.jpg)
クラスカルのアルゴリズム
• 基本戦略 – 最初に重みにより辺集合をソートする – 森を連結していき、最終的に木となる
€
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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/19.jpg)
クラスカルのアルゴリズム
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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/20.jpg)
クラスカルのアルゴリズム
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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/21.jpg)
クラスカルのアルゴリズム
• 雰囲気 – 重み最小の辺の周辺から、森の成長がはじまり、それがのそのそとくっついていく
• データ構造 – 互いに疎な集合の森 (disjoint‐set forest) で、ノード集合を管理 • m 回の MAKE‐SET と n 回の MAKE‐SET/UNION/FIND‐SET の計算量が O(mα(n))
![Page 22: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/22.jpg)
クラスカルのアルゴリズム
• 計算量 – 初期化 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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/23.jpg)
プリムのアルゴリズム
• 基本戦略 – 指定されたノードから、最も重みの少ない頂点への辺を加え木を育てて行く
€
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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/24.jpg)
プリムのアルゴリズム
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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/25.jpg)
プリムのアルゴリズム
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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/26.jpg)
プリムのアルゴリズム
• 雰囲気 – 指定ノードからぞわぞわ木が育っていく – 直感的に最小全域木が作られてるっぽい
• データ構造 – 二分ヒープ • BUILD‐MIN‐HEAP O(n) • EXTRACT‐MIN O(lg n) • DECREASE‐KEY O(lg n)
![Page 27: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/27.jpg)
プリムのアルゴリズム
• 計算量 – 初期化 O(V) – 全 EXTRACT‐MIN 操作 O(V lg V) – 隣接点の処理 O(E lg V) – よって O(V lg V + E lg V)
![Page 28: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/28.jpg)
プリムのアルゴリズム
• フィボナッチヒープの場合 – 初期化 O(V) – 全 EXTRACT‐MIN 操作 O(V lg V) – 隣接点の処理 O(E) – よって O(V lg V + E)
![Page 29: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/29.jpg)
疎な場合の前処理 (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](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/30.jpg)
その他のアルゴリズム
• ブルーフカ法 – 重みが全て異なるグラフを前提
– O(E lg V)
• Reverse‐DeleCon 法 – クラスカル法の逆 – 最初に全ての辺を含むグラフからはじめ、重みの大きい辺から削除していく
– O(E lg E (lg lg E)3)
![Page 31: Algo 23 MSTP](https://reader033.vdocuments.mx/reader033/viewer/2022052316/559701be1a28abeb358b46ae/html5/thumbnails/31.jpg)
まとめ
• 最小全域木問題 – 貪欲戦略で最適解を得ることが出来る – クラスカル法 • 森を育てて最終的に MST を得る
• O(E lg V) – プリム法 • ノードを指定し、枝をのばし最終的に MST を得る
• O(E lg V) • ただしフィボナッチヒープを用いて、ならし解析すると O(E+V lg V)