第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2)...

19
講義「アルゴリズムとデータ構造」 第13回 グラフとネットワークのアルゴリズム (2) 大学院情報科学研究院 情報理工学部門 情報知識ネットワーク研究室 喜田拓也 2019/5/21 講義資料

Upload: others

Post on 11-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

講義「アルゴリズムとデータ構造」

第13回 グラフとネットワークのアルゴリズム(2)

大学院情報科学研究院 情報理工学部門情報知識ネットワーク研究室

喜田拓也

2019/5/21講義資料

Page 2: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

今日の内容

2

グラフとは (おさらい)

グラフ𝐺𝐺に対する全域木について

全域木(スパニング木)最小全域木(最小スパニング木)

最小全域木を求めるアルゴリズムについて

クラスカルのアルゴリズムクラスカルのアルゴリズムの高速化クラスカルのアルゴリズムが正しいことの証明時間計算量がO 𝑚𝑚 log𝑛𝑛 であることの証明

Page 3: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

無向グラフ 有向グラフ

グラフとは (おさらい)

3

頂点(vertex)の集合𝑉𝑉と辺(edge)の集合𝐸𝐸 ⊆ 𝑉𝑉 × 𝑉𝑉の組(𝑉𝑉,𝐸𝐸)

𝑣𝑣0

𝑣𝑣1

𝑣𝑣2 𝑣𝑣3

𝑣𝑣4𝑒𝑒0

𝑒𝑒1𝑒𝑒2

𝑒𝑒3

𝑒𝑒4

𝑒𝑒5𝑣𝑣0

𝑣𝑣1

𝑣𝑣2 𝑣𝑣3

𝑣𝑣4𝑒𝑒0

𝑒𝑒1𝑒𝑒2

𝑒𝑒3

𝑒𝑒4

𝑒𝑒5

𝑣𝑣0

𝑣𝑣1

𝑣𝑣2 𝑣𝑣3

𝑣𝑣42

34

21

2𝑣𝑣0

𝑣𝑣1

𝑣𝑣2 𝑣𝑣3

𝑣𝑣42

34

21

2

無向ネットワーク 有向ネットワーク

Page 4: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

𝑣𝑣0 𝑣𝑣1 𝑣𝑣2 𝑣𝑣3 𝑣𝑣4

※ 無向グラフの場合は,各辺を両方向の2辺からなる有向グラフとみなして表現する

グラフの表現のしかた (おさらい)

4

𝑣𝑣0

𝑣𝑣1

𝑣𝑣2 𝑣𝑣3

𝑣𝑣4𝑒𝑒0

𝑒𝑒1𝑒𝑒2

𝑒𝑒3

𝑒𝑒4

𝑒𝑒5

𝑣𝑣0

𝑣𝑣1

𝑣𝑣2 𝑣𝑣3

𝑣𝑣42

34

21

2

0 1 1 0 00 0 1 0 00 0 0 1 00 0 0 0 11 0 0 0 0

𝑣𝑣0𝑣𝑣1𝑣𝑣2𝑣𝑣3𝑣𝑣4

𝑣𝑣0 𝑣𝑣1 𝑣𝑣2 𝑣𝑣3 𝑣𝑣40 2 4 0 00 0 3 0 00 0 0 2 00 0 0 0 12 0 0 0 0

𝑣𝑣0𝑣𝑣1𝑣𝑣2𝑣𝑣3𝑣𝑣4

隣接行列

01234

2 NULL12 NULL

3 NULL

4 NULL

0 NULL

01234

2 NULL33 NULL24 NULL10 NULL2

1 2 2 NULL4

隣接リスト

Page 5: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

グラフ𝐺𝐺に対する全域木(spanning tree)

5

深さ優先の全域木 幅優先の全域木

定義:

「グラフ𝐺𝐺𝐺はグラフ𝐺𝐺 = (𝑉𝑉,𝐸𝐸)の全域木(スパニング木)である」

⇕「𝐺𝐺𝐺は𝐺𝐺のすべての頂点を含む部分グラフで木になっているもの」

【路(path)】 辺でつながった頂点の列

【閉路(cycle)】 自分に戻ってくるような路(長さは3頂点以上)

グラフ𝐺𝐺が連結 ⇔ 𝐺𝐺の任意の頂点対が路でつながっている

グラフ𝐺𝐺が木 ⇔ 𝐺𝐺は閉路のない連結グラフ

𝑣𝑣0𝑣𝑣1

𝑣𝑣2

𝑣𝑣3 𝑣𝑣4𝑣𝑣5 𝑣𝑣6

𝑣𝑣7

𝑣𝑣0𝑣𝑣1

𝑣𝑣2

𝑣𝑣3 𝑣𝑣4𝑣𝑣5 𝑣𝑣6

𝑣𝑣7

Page 6: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

ネットワーク𝐺𝐺の最小全域木(minimum spanning tree)

6

定義:

グラフ𝐺𝐺𝐺はネットワーク(重み付きグラフ)𝐺𝐺 = (𝑉𝑉,𝐸𝐸)の最小全域木(最小スパニング木)である

⇕𝐺𝐺𝐺は𝐺𝐺の全域木で含まれる辺の重みの総和が最小のもの

𝐺𝐺の最小スパニング木

432

51

2 7

ネットワーク𝐺𝐺

42

1

2

応用例として,通信網の設計,ガス・水道の配管設計などがある

Page 7: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

最小全域木を求めるアルゴリズム

• プリム(Prim)のアルゴリズム

1930年にVojtěch Jarník(ヤルニーク)が開発.それとは独立に1957年にPrimにより開発された.また,1959年にはDijkstraにより再発見された.DJP法,Jarník法,Jarník-Prim法とも呼ばれる.

最小全域木が構成されている連結成分の範囲を徐々に広げていくという方針で求める.

7

Joseph B. Kruskal1928-2010 , USA

Robert Clay Prim (1921-?), USA

最小全域木(MST)を求める代表的なアルゴリズム

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

1956年にJoseph Kruskal(ジョセフ・クラスカル)に

よって提案された.重みが小さい辺から選択し,現在の解に追加していくという方針で求める.

Page 8: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

[考え方] 解候補𝑇𝑇を空集合から始めて,重みが小さい辺から選

択し,現在の解候補𝑇𝑇に加えていく.ただし,選択することにより閉

路ができる場合は選択しない.

8

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

クラスカルのアルゴリズムの解候補𝑇𝑇がもつ性質• 𝑇𝑇は閉路を含まない• 𝑇𝑇は,森になっている(必ずしも連結しているとは限らない)

※ グラフ𝐺𝐺が森 ⇔ 𝐺𝐺は閉路のないグラフ

432

51

2 7

432

51

2 7

432

51

2 7

432

51

2 7

432

51

2 7閉路ができる!

Page 9: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

クラスカルのアルゴリズム(疑似コード)

9

Procedure MST-Kruskal(𝐺𝐺: グラフ, 𝑤𝑤: 重み)1: 𝑇𝑇 ← φ; // 解𝑇𝑇は最初は空

2: 辺の配列𝑒𝑒を重みの小さい順𝑒𝑒 0 , … , 𝑒𝑒[𝑚𝑚 − 1]に整列する;3: for 𝑖𝑖 ← 0, 1, … ,𝑚𝑚− 1 do4: if (𝑇𝑇 ∪ 𝑒𝑒 𝑖𝑖 が閉路を含まない) then 5: 𝑇𝑇 ← 𝑇𝑇 ∪ 𝑒𝑒 𝑖𝑖 ;6: end if7: end for6: 最小全域木 𝑇𝑇を出力する;

このチェックは意外に難しい!

単純にやると毎回O(𝑛𝑛)時間かかる(全体ではO(𝑚𝑚𝑛𝑛))(ヒント: 𝑒𝑒[𝑖𝑖]の一方の頂点から𝑇𝑇を探索をする)

Page 10: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

練習問題:最小全域木を求めてみよう!

10

3

1

2

3

2

1

問1 問2

問3 問4

2

13

2

3

1

3

1

2

1

13

44

4 2

1

1 3

4

33

1

2

1

14

4

4 2

1

33

1

2

1

14

4

4 2

1

Page 11: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

解決法

𝑇𝑇の連結成分毎に,頂点に異なる「色」を塗っておいて,新しく加えた辺𝑒𝑒[𝑖𝑖]の両端の色を比べることでチェックできる!

「色」のグループを表すのには,Union-Findデータ構造を使う

両端が異なる色のときは,辺を加えても閉路はできない

辺を加えたら色を塗り直す

良い辺

悪い辺

両端が同じ色のときは,辺を加えると閉路ができる

クラスカルのアルゴリズムの高速化

単純に塗り直すと毎回O(𝑛𝑛)時間かかる 11

Union-FindでO(log𝑛𝑛)時間に

Page 12: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

「色」(グループ番号)をもつグループ分けを管理するデータ構造

次の二つの演算を毎回O(log𝑛𝑛)時間で実行できる

• Union(𝑖𝑖, 𝑗𝑗): 番号𝑖𝑖のグループと番号𝑗𝑗のグループを合併する

• Find(𝑖𝑖): 番号𝑖𝑖のグループ番号を返す

Union-Find データ構造

色の塗り直しに相当

ただし色は選べない

Union(1,2) Union(2,7)

色:1, 2, 7

1 2 7

5 3 8

4 6

色: 2, 7

1 2 7

5 3 8

4 6

色: 2

1 2 7

5 3 8

4 6

Find(1) → 1Find(4) → 2Find(6) → 7

Find(1) → 2Find(4) → 2Find(6) → 7

Find(1) → 2Find(4) → 2Find(6) → 2

代表元(色を表す)

12

Page 13: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

集合のグループ分けを,木のあつまり(森)で表現する

各グループは,要素番号を頂点ラベルとする一つの木に対応する

グループの色は,対応する木の根がもつ要素番号とする

Union-Find データ構造の実現方法

Union(1,2) Union(2,7)

1

5

2

3 4

7

6 8 1

5

2

3 4

7

6 8 1

5

2

3 4 7

6 8

Find(𝑖𝑖): 番号𝑖𝑖の頂点から親をたどり,根の番号を返す

Union(𝑖𝑖,𝑗𝑗): 番号𝑖𝑖と番号𝑗𝑗が属する木をマージする.ただし,高さが低い方の木

の根を高い方の木の根の子とする(高さが同じ場合はどちらでもよい)

どちらもO(log𝑛𝑛) (𝑛𝑛は要素数) ※ Find(𝑖𝑖)の証明はそれほど自明ではない 13

Page 14: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

【補題】 (𝑉𝑉,𝐸𝐸)を連結無向グラフとし,𝑆𝑆 ⊆ 𝐸𝐸とする.このとき,以下の条件は,部分グラフ(𝑉𝑉, 𝑆𝑆)が(𝑉𝑉,𝐸𝐸)の最小全域木であるための必要十分条件である.

条件: 部分グラフ(𝑉𝑉, 𝑆𝑆)は(𝑉𝑉,𝐸𝐸)の全域木で,すべての𝑒𝑒 ∈ 𝐸𝐸 − 𝑆𝑆に対して,

𝑤𝑤 𝑒𝑒 ≥ 𝑤𝑤 𝑒𝑒′ for all 𝑒𝑒𝑒 ∈ 𝐶𝐶𝑆𝑆 𝑒𝑒

ただし,𝑤𝑤(𝑒𝑒)は辺𝑒𝑒の重みを表し,𝐶𝐶𝑆𝑆 𝑒𝑒 は辺𝑒𝑒と𝑆𝑆の辺によって作られる閉路に含まれる𝑇𝑇の辺集合を表す.

クラスカルのアルゴリズムのベースとなる補題

𝐸𝐸 − 𝑆𝑆は差集合

(𝐸𝐸 ∖ 𝑆𝑆とも書く)

𝑒𝑒※ 太線: 𝑆𝑆, 細線: 𝐸𝐸 − 𝑆𝑆, 赤色太線: 𝐶𝐶𝑆𝑆 𝑒𝑒

432

51

2 7

432

51

2 7

432

51

2 7

432

51

2 7

𝑒𝑒

𝑒𝑒14

Page 15: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

よって,(𝑉𝑉, 𝑆𝑆)が最小全域木であれば必ず条件を満たす.

補題の証明(前半:⇒の証明)

15

𝑒𝑒

𝑒𝑒𝑒 𝐶𝐶𝑆𝑆 𝑒𝑒

𝑤𝑤 𝑒𝑒 < 𝑤𝑤 𝑒𝑒′

これを取って

これを付ける

「 𝑉𝑉, 𝑆𝑆 は最小全域木」 ⇒ 「𝑤𝑤 𝑒𝑒 ≥ 𝑤𝑤 𝑒𝑒′ for all 𝑒𝑒′ ∈ 𝐶𝐶𝑆𝑆 𝑒𝑒 」

(𝑉𝑉, 𝑆𝑆)が最小全域木なのに条件を満たさないと仮定する.

すると,仮定より,ある𝑒𝑒 ∈ 𝐸𝐸 − 𝑆𝑆が存在し,ある

𝑒𝑒′ ∈ 𝐶𝐶𝑆𝑆 𝑒𝑒 に対して𝑤𝑤 𝑒𝑒 < 𝑤𝑤 𝑒𝑒′ が成り立つ.

𝑉𝑉, 𝑆𝑆 ∪ 𝑒𝑒 − 𝑒𝑒′ は(𝑉𝑉,𝐸𝐸)の全域木であり,

(𝑉𝑉, 𝑆𝑆)よりも辺の重みの和が小さい.

これは(𝑉𝑉, 𝑆𝑆)が最小全域木であることに矛盾する.

Page 16: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

補題の証明(後半:⇐の証明)

𝑒𝑒 ∈ 𝑆𝑆∗ − 𝑆𝑆が存在したとする.𝑒𝑒により分かれる二つの連結成分を

𝑉𝑉0, 𝑆𝑆0∗ , 𝑉𝑉1, 𝑆𝑆1∗ とすると,𝑒𝑒′ ∈ 𝐶𝐶𝑆𝑆 𝑒𝑒 で二つの連結成分 𝑉𝑉0, 𝑆𝑆0∗ ,𝑉𝑉1, 𝑆𝑆1∗ をまたぐ辺𝑒𝑒′ ∈ 𝑆𝑆が存在する.

(𝑉𝑉, 𝑆𝑆)は条件を満たしており,𝑤𝑤 𝑒𝑒 ≥ 𝑤𝑤 𝑒𝑒′ が成り立つので,

𝑆𝑆′ = 𝑆𝑆∗ ∪ 𝑒𝑒′ − 𝑒𝑒 とすれば,𝑆𝑆′の重みの総和は𝑆𝑆∗の重みの総

和以下になる.𝑆𝑆∗は最小全域木なので, 𝑆𝑆′も𝑆𝑆∗と重みの総和が

等しい最小全域木であり, 𝑆𝑆∗ − 𝑆𝑆 > 𝑆𝑆′ − 𝑆𝑆 を満たす.ただし,

|𝑆𝑆|は集合𝑆𝑆の要素数を表すものとする.したがって,𝑆𝑆′を𝑆𝑆∗として

同じ操作を繰り返すと𝑆𝑆′ = 𝑆𝑆となり,𝑆𝑆も𝑆𝑆∗と重みの総和が等しい

最小全域木であることが示される.

【証明終わり】

2

23

3

𝑒𝑒𝑒𝑒′

2

3

3𝑒𝑒𝑒𝑒𝑒

𝑆𝑆𝑒

2

3

𝑆𝑆 𝑆𝑆∗16

𝑉𝑉0, 𝑆𝑆0∗

𝑉𝑉1, 𝑆𝑆1∗

𝑆𝑆′′

「 𝑉𝑉, 𝑆𝑆 は最小全域木」 ⇐ 「𝑤𝑤 𝑒𝑒 ≥ 𝑤𝑤 𝑒𝑒′ for all 𝑒𝑒′ ∈ 𝐶𝐶𝑆𝑆 𝑒𝑒 」

最小全域木の一つを 𝑉𝑉, 𝑆𝑆∗ とする.条件を満たす 𝑉𝑉, 𝑆𝑆 の

辺の重みの和は 𝑉𝑉, 𝑆𝑆∗ の辺の重みの和に等しいことを示す.

Page 17: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

いま, 𝑆𝑆0に含まれる辺の端点の集合を𝑉𝑉′とし,𝑉𝑉′ = 𝑉𝑉を示す.𝑉𝑉′ ≠ 𝑉𝑉と仮定すると,ある頂点𝑣𝑣 ∈ 𝑉𝑉 − 𝑉𝑉′が存在する.(𝑉𝑉,𝐸𝐸)は連結であるので,ある頂点𝑢𝑢 ∈ 𝑉𝑉′が存在して,𝑉𝑉′の頂点を経由しないで𝑣𝑣へ到達する路が存在する.その路に属する辺を𝑆𝑆0に加えても閉路はできない.これはアルゴリズムの「閉路ができない限り辺を加える」という動作に矛盾する.よって𝑉𝑉′ = 𝑉𝑉となり,(𝑉𝑉, 𝑆𝑆0)は全域木であることが示された.

クラスカルのアルゴリズムが正しいことの証明

次に,すべての𝑒𝑒 ∈ 𝐸𝐸 − 𝑆𝑆0,すべての𝑒𝑒′ ∈ 𝐶𝐶𝑆𝑆0 𝑒𝑒 に対して𝑤𝑤 𝑒𝑒 ≥ 𝑤𝑤 𝑒𝑒′ が成り

立つことを示す.ある𝑒𝑒 ∈ 𝐸𝐸 − 𝑆𝑆0が存在して,ある𝑒𝑒′ ∈ 𝐶𝐶𝑆𝑆0 𝑒𝑒 に対して𝑤𝑤 𝑒𝑒 <𝑤𝑤 𝑒𝑒′ が成り立ったと仮定する.すると,MST-Kruskalアルゴリズムの4行目において𝑆𝑆 ∪ 𝑒𝑒 が閉路を持つか否かチェックするときには,

𝑒𝑒

𝑒𝑒𝑒 𝐶𝐶𝑆𝑆0 𝑒𝑒

𝑤𝑤 𝑒𝑒 < 𝑤𝑤 𝑒𝑒′ 17

(証明) クラスカルのアルゴリズムにより求めた辺の集合を𝑆𝑆0とする.このとき,補題の条件が成り立っていることを示せばよい.まず,(𝑉𝑉, 𝑆𝑆0)が全域木であることを示す.(𝑉𝑉, 𝑆𝑆0)は明らかに閉路を持たない.

𝑉𝑉′

𝑣𝑣

𝑢𝑢

𝑉𝑉

𝑆𝑆にはまだ𝑒𝑒′は含まれていないので, 𝑆𝑆 ∪ 𝑒𝑒 は閉路を持たないことになり𝑆𝑆0が𝑒𝑒を含んでいないことに矛盾する.よって,補題の条件が成り立つ.したがって,(𝑉𝑉, 𝑆𝑆0)は

最小全域木である. 【証明終わり】

こっちが先

Page 18: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

(証明) 頂点数𝑛𝑛,辺数𝑚𝑚のグラフ𝐺𝐺に対して,アルゴリズムMST-Kruskalにかかる時間を考える.

1行目は明らかにO(1)時間でできる.

2行目の辺のソートは,𝑚𝑚個のソートなのでO(𝑚𝑚 log𝑚𝑚)であるが,

𝑚𝑚 ≤ 𝑛𝑛2なのでO(𝑚𝑚 log𝑛𝑛).3〜7行目のforループでは,各繰り返しにつき,高々𝑛𝑛 − 1回の

Unionと,高々2𝑚𝑚回のFindを実行する.UnionとFindはO(log𝑛𝑛)時間でできるから,O 𝑛𝑛 + 𝑚𝑚 × O log𝑛𝑛 = O 𝑛𝑛 + 𝑚𝑚 log𝑛𝑛 時間.

連結グラフで考えているので𝑛𝑛 − 1 ≤ 𝑚𝑚である.すなわち,forルー

プ全体はO(𝑚𝑚 log𝑛𝑛)時間で実行できる.

したがって,全体の計算時間はO 𝑚𝑚 log𝑛𝑛 で実行できる.

【証明終わり】

クラスカルのアルゴリズムの最悪時間計算量はO(𝑚𝑚 log𝑛𝑛)

18

Page 19: 第13回グラフとネットワークのアルゴリズム(2)kida/lecture/alg2019-13.pdf第13回グラフとネットワークのアルゴリズム(2) 大学院情報科学研究院情報理工学部門

練習問題:最小全域木を求めてみよう!

19

3

1

2

3

2

1

問1 問2

問3 問4

2

13

2

3

1

3

1

2

1

13

44

4 2

1

1 3

4

33

1

2

1

14

4

4 2

1

33

1

2

1

14

4

4 2

1