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

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

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

Page 1: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

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

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

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

喜田拓也

2019/5/21講義資料

Page 2: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

今日の内容

最小全域木を求めるクラスカルのアルゴリズム(おさらい)

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

プリムのアルゴリズムの考え方時間計算量がO 𝑚𝑚 log𝑛𝑛 であることの証明

最短路問題について最短路と最短路木ダイクストラのアルゴリズムダイクストラ・アルゴリズムの直観的理解

2

Page 3: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

ネットワーク𝐺𝐺の最小全域木 (おさらい)

定義:

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

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

𝐺𝐺の最小スパニング木

432

51

2 7

ネットワーク𝐺𝐺

42

1

2

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

Page 4: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

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

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

場合は選択しない.

クラスカルのアルゴリズム (おさらい)

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

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

432

51

2 7

432

51

2 7

432

51

2 7

432

51

2 7

432

51

2 7閉路ができる!

4

Page 5: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

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

5

[考え方] 解候補 𝑉𝑉𝑇𝑇 ,𝑇𝑇 をある頂点𝑣𝑣0のみからなる木(𝑣𝑣0からな

る部分グラフに対する最小全域木)から始めて,最小全域木

𝑉𝑉𝑇𝑇 ,𝑇𝑇 の範囲を徐々に広げていく.

432

51

2 7

432

51

2 7

432

51

2 7

432

51

2 7

最小全域木が求まっている範囲 𝑉𝑉𝑇𝑇 ,𝑇𝑇拡張候補辺(赤い辺)

𝑉𝑉𝑇𝑇に属する頂点との間に辺がある𝑉𝑉 − 𝑉𝑉𝑇𝑇に属する頂点(青い頂点)拡張候補辺を選んだとき𝑉𝑉𝑇𝑇に追加される 43

2

51

2 7

𝑣𝑣∗

拡張候補辺のうち,重みが最小のものを選択

その先の頂点を加えたら,拡張候補辺を更新

𝑣𝑣∗

𝑣𝑣∗

𝑣𝑣∗

Page 6: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

プリムのアルゴリズム (疑似コード)

6

Procedure MST-Prim(𝐺𝐺 = (𝑉𝑉,𝐸𝐸): グラフ, 𝑤𝑤: 重み, 𝑠𝑠: 起点)1: 𝑣𝑣∗ ← 𝑠𝑠; 𝑇𝑇 ← ∅; 𝑉𝑉𝑇𝑇 ← {𝑠𝑠}; 𝑑𝑑 𝑠𝑠 ← 0;2: for all 𝑣𝑣 ∈ 𝑉𝑉-𝑉𝑉𝑇𝑇 do 𝑑𝑑 𝑣𝑣 = ∞;3: while (𝑉𝑉𝑇𝑇 ≠ 𝑉𝑉) do4: for each (頂点𝑣𝑣∗と隣接する頂点𝑣𝑣 ∈ 𝑉𝑉 − 𝑉𝑉𝑇𝑇) do5: if (𝑤𝑤 𝑣𝑣∗,𝑣𝑣 < 𝑑𝑑 𝑣𝑣 ) then6: 𝑑𝑑(𝑣𝑣) ← 𝑤𝑤(𝑣𝑣∗,𝑣𝑣), 𝑒𝑒(𝑣𝑣) ← 𝑣𝑣∗,𝑣𝑣 ;7: end if8: end for9: 𝑣𝑣∗ ← arg min

𝑣𝑣∈𝑉𝑉−𝑉𝑉𝑇𝑇𝑑𝑑 𝑣𝑣 ;

10: 𝑉𝑉𝑇𝑇 ← 𝑉𝑉𝑇𝑇 ∪ 𝑣𝑣∗ , 𝑇𝑇 ← 𝑇𝑇 ∪ 𝑒𝑒 𝑣𝑣∗ ;11: end while12: 最小全域木𝑇𝑇を出力する;

𝑒𝑒(𝑣𝑣)は𝑣𝑣を端点とする拡張候補辺

𝑑𝑑(𝑣𝑣)は𝑣𝑣を端点とする拡張候補辺の重み

Page 7: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

プリムのアルゴリズムの動作例

7

3

22 2

3

1 4 1

43 11 2

3

3

0𝑣𝑣∗

3

2

∞∞

∞∞

0

𝑣𝑣∗

2

2

2

1

∞∞

0

𝑣𝑣∗

2

2

2

1

3

4

∞ ∞∞

2𝑣𝑣∗

0

2

2

1

3

4

4 ∞∞

2𝑣𝑣∗

02

2

1

1

4

3 ∞∞

𝑣𝑣∗0

2

2

2

1

1

4

1 ∞2

𝑣𝑣∗0

2

2

2

1

1

4

1 ∞2

𝑣𝑣∗0

2

2

2

11

1

12

3

𝑣𝑣∗

02

2

2

1

1

1

12

3

𝑣𝑣∗0

2

2

2

1

1

1

12

3

𝑣𝑣∗:追加された頂点赤字:更新された値

:拡張候補辺:解候補

𝑠𝑠

Page 8: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

(証明) 1行目は定数時間で,2行目は明らかにO(𝑛𝑛)時間かかる.3行目のwhileのチェックは𝑉𝑉と𝑉𝑉𝑇𝑇のサイズ比較で行えるため,毎

回の実行は定数時間である.4行目のfor eachのループは新たな𝑣𝑣∗毎に実行される.𝑣𝑣∗は結局

はすべての𝑣𝑣 ∈ 𝑉𝑉が一度ずつなるので,for eachループの中身はwhileループ全体で2𝑚𝑚回実行される.for eachループの中身は数

値比較と代入だけなので毎回の実行は定数時間であり,グラフが隣接リストで与えられている場合,全体でO(𝑚𝑚)時間で実行できる.

9行目のarg minの実行は,単純に行うと𝑘𝑘回目のループのときO 𝑛𝑛 − 𝑘𝑘 時間がかかる.しかし,ヒープを使えば1回あたりO(log𝑛𝑛)時間でできる.10行目は明らかに定数時間でできるので,以上から,whileループ全体ではO(𝑚𝑚 + 𝑛𝑛 log𝑛𝑛)時間かかることになる.

グラフの連結性より𝑚𝑚 ≥ 𝑛𝑛 − 1なので,よって全体をO 𝑚𝑚 log𝑛𝑛時間で抑えることができる. 【証明終わり】

最悪時間計算量がO(𝑚𝑚 log𝑛𝑛)の証明

8

Page 9: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

札幌から新千歳空港への最安乗り換え?

札幌 新札幌 北広島 恵庭 千歳 南千歳新千歳空港

9

※ JR北海道のウェブサイト,2019年5月21日調べ快速エアポート(自由席)利用の場合

260 260 260 220 170 310

450 450 360 260 350

640 640 450 400

840 640 590

840 880

1070

Page 10: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

最短路とは

10

定義:

無向ネットワーク𝐺𝐺 = (𝑉𝑉,𝐸𝐸)において,頂点𝑢𝑢 ∈ 𝑉𝑉から頂点𝑣𝑣 ∈ 𝑉𝑉への最短路(shortest path)とは,𝑢𝑢から𝑣𝑣への路(path)のうち,

辺の重みの総和が最小のものである.

※ 負の重みを許すか否かで問題の難しさが変わる本講義では,重みはすべて非負の値をとると仮定する

3

2

2 2

3

1 4 1

43 1

1 23

3𝑢𝑢

𝑣𝑣

𝑢𝑢から𝑣𝑣への最短路

Page 11: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

最短路木とは

11

定義:

辺の重みが非負である連結な無向ネットワーク𝐺𝐺 = (𝑉𝑉,𝐸𝐸) に対し,

グラフ𝐺𝐺′は頂点𝑠𝑠 ∈ 𝑉𝑉からの最短路木(shortest path tree)である

⇕𝐺𝐺′は𝑠𝑠を根とする𝐺𝐺の全域木で,𝑠𝑠から各頂点への路が最短路に

なっているもの

3

2

2 2

3

1 4 1

43 1

1 23

3𝑠𝑠

𝑠𝑠を根とする最短路木

Page 12: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

Edsger W. Dijkstra(1930–2002)オランダ1972年チューリング賞

最短路木を求めるダイクストラアルゴリズム

12

[考え方] 解候補 𝑉𝑉𝑇𝑇 ,𝑇𝑇 をある頂点𝑠𝑠のみからなる木

(𝑠𝑠からなる部分グラフに対する最短路木)から始めて,

最短路木 𝑉𝑉𝑇𝑇 ,𝑇𝑇 の範囲を徐々に広げていく.

432

51

2 7

432

5

2 7

𝟏𝟏

432

5

7

𝟏𝟏

𝟐𝟐

𝑠𝑠 = 𝑣𝑣∗𝑣𝑣∗

𝑣𝑣∗𝟒𝟒

32

5𝟏𝟏

𝟐𝟐7

𝑣𝑣∗

最短路木が求まっている範囲拡張候補辺(赤い辺)

𝑉𝑉𝑇𝑇に属する頂点との間に辺がある𝑉𝑉 − 𝑉𝑉𝑇𝑇に属する頂点(青い頂点)拡張候補辺を選んだとき𝑉𝑉𝑇𝑇に追加される

拡張候補辺は,𝑢𝑢 ∈ 𝑉𝑉𝑇𝑇と𝑣𝑣 ∈ 𝑉𝑉 − 𝑉𝑉𝑇𝑇との間の

辺𝑒𝑒 = (𝑢𝑢, 𝑣𝑣)のうち,𝑠𝑠から𝑢𝑢への最短路長𝑑𝑑(𝑢𝑢)と𝑤𝑤(𝑒𝑒)の和が最小のもの

𝟒𝟒3

𝟔𝟔

5𝟏𝟏

𝟐𝟐7

𝑣𝑣∗

Page 13: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

ダイクストラアルゴリズム (疑似コード)

13

Procedure SPT-Dijkstra(𝐺𝐺 = (𝑉𝑉,𝐸𝐸): グラフ, 𝑤𝑤: 重み, 𝑠𝑠: 起点)1: 𝑣𝑣∗ ← 𝑠𝑠; 𝑇𝑇 ← ∅; 𝑉𝑉𝑇𝑇 ← {𝑠𝑠}; 𝑑𝑑 𝑠𝑠 ← 0;2: for all 𝑣𝑣 ∈ 𝑉𝑉-𝑉𝑉𝑇𝑇 do 𝑑𝑑 𝑣𝑣 = ∞;3: while (𝑉𝑉𝑇𝑇 ≠ 𝑉𝑉) do4: for each (頂点𝑣𝑣∗と隣接する頂点𝑣𝑣 ∈ 𝑉𝑉 − 𝑉𝑉𝑇𝑇) do5: if (𝑤𝑤 𝑣𝑣∗,𝑣𝑣 + 𝑑𝑑 𝑣𝑣∗ < 𝑑𝑑 𝑣𝑣 ) then6: 𝑑𝑑 𝑣𝑣 ← 𝑤𝑤 𝑣𝑣∗,𝑣𝑣 + 𝑑𝑑 𝑣𝑣∗ , 𝑒𝑒(𝑣𝑣) ← 𝑣𝑣∗,𝑣𝑣 ;7: end if8: end for9: 𝑣𝑣∗ ← arg min

𝑣𝑣∈𝑉𝑉−𝑉𝑉𝑇𝑇𝑑𝑑 𝑣𝑣 ;

10: 𝑉𝑉𝑇𝑇 ← 𝑉𝑉𝑇𝑇 ∪ 𝑣𝑣∗ , 𝑇𝑇 ← 𝑇𝑇 ∪ 𝑒𝑒 𝑣𝑣∗ ;11: end while12: 最短路木𝑇𝑇を出力する;

𝑒𝑒(𝑣𝑣)は𝑣𝑣を端点とする拡張候補辺

𝑑𝑑(𝑣𝑣)は𝑣𝑣を端点とする拡張候補辺の重み

Primのアルゴリズムとの違いは+𝑑𝑑 𝑣𝑣∗ だけ!

時間計算量は同じO 𝑚𝑚 log𝑛𝑛

Page 14: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

ダイクストラアルゴリズムの動作例

14

3

22 2

3

1 4 1

43 11 2

3

3

0𝑣𝑣∗

3

2

∞∞

∞∞

0

𝑣𝑣∗

3

2

4

3

∞∞

0 𝑣𝑣∗3

2

4

3

7 ∞∞

03

2

4

3

6

7

7 ∞∞

𝑣𝑣∗

2𝑣𝑣∗

03

4

3

5

7

7 ∞∞

𝑣𝑣∗0

3

2

4

3

5

7

6 ∞7

𝑣𝑣∗0

3

2

4

3

5

7

6 ∞7

𝑣𝑣∗0

3

2

4

35

7

67

10

𝑣𝑣∗

03

2

4

3

5

7

67

10

𝑠𝑠

𝑣𝑣∗

2

03

2

4

3

5

7

67

10

𝑣𝑣∗:追加された頂点赤字:更新された値

:拡張候補辺:解候補

Page 15: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

ダイクストラアルゴリズムの直観的理解

15

3

2

2 2

3

1 4 1

43 1

1 23

3𝑠𝑠

𝑠𝑠

辺を細かく分けて,すべての辺の重みが等しく(1に)なるようにする

起点𝑠𝑠から幅優先探索を行い,到達した順に頂点を解に加える

12 3 5 6 7

8 9

10

4

探索の深さ

Page 16: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

最短路に関する発展的な話題

辺の重みが非負整数の場合は平均時O(𝑚𝑚)まで改善で

きる(ただし,ランダムアルゴリズムによる)[U. Meyar, Single-source shortest-paths on arbitrary directed graphs in linear average-case time, in ACM-SIAM Symposium. Discrete Algorithms, 2001, pp. 797-806.]

ベルマン-フォード アルゴリズム(Bellman-Ford algorithm)

は正負の重みを扱えるが,最悪時計算量はO(𝑚𝑚𝑛𝑛)

与えられたグラフについて,すべての2頂点間の距離を

求めるワーシャル-フロイド アルゴリズム(Warshall-Floyd algorithm)の最悪時間計算量はO(𝑛𝑛3)

16

Page 17: 第14回グラフとネットワークのアルゴリズム(3)kida/lecture/alg2019-14.pdf · 最短路木とは 11 定義: 辺の重みが非負である連結な無向ネットワーク𝐺𝐺=

札幌から新千歳空港への最安乗り換え!

札幌 新札幌 北広島 恵庭 千歳 南千歳新千歳空港

260 450 640 810 840 1040

17

※ JR北海道のウェブサイト,2019年5月21日調べ快速エアポート(自由席)利用の場合

260 260 260 220 170 310

450 450 360 260 350

640 640 450 400

840 640 590

840 880

1070