graph algorithms part 1

57
グラフアルゴリズムその1 2017-11-07 宮川 拓

Upload: taku-miyakawa

Post on 29-Jan-2018

135 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Graph Algorithms Part 1

グラフアルゴリズムその1

2017-11-07

宮川 拓

Page 2: Graph Algorithms Part 1

グラフアルゴリズムを勉強しよう

背景

機械学習の部分問題として出てきがち

ex.物体検出 , 形態素解析 , . . .

最短経路問題が多そう?

概要2/57

Page 3: Graph Algorithms Part 1

参考文献

コルメン他

『アルゴリズム・イントロダクショ

ン』第3版(2013, 近代科学社)

3/57

Page 4: Graph Algorithms Part 1

アジェンダ

グラフに関する用語と概念

グラフの探索

トポロジカルソート

単一始点最短経路問題(次回)

4/57

Page 5: Graph Algorithms Part 1

グラフに関する用語と概念

5/57

Page 6: Graph Algorithms Part 1

グラフの構成

グラフ:=

頂点 (vertex) と、

頂点同士をつなぐ辺 (edge) 、

からなるデータ構造

6/57

Page 7: Graph Algorithms Part 1

グラフの構成

グラフG=(V, E)

ただしV={v0, v1, ... v5},

E={e0, e1, ... e5}

v0 v1

v2

v5v3 v4

e0

e1

e2

e3

e4

e5

e6

7/57

Page 8: Graph Algorithms Part 1

有向グラフと無向グラフ

有向グラフ

無向グラフ

8/57

Page 9: Graph Algorithms Part 1

有向グラフと無向グラフ

無向グラフは有向グラフの特殊な場合

とみなすこともできる

つまり、(v0, v1)がG.Eの元であるとき、

必ず(v1, v0)もG.Eの元であるような有

向グラフ、と考えれば良い

9/57

Page 10: Graph Algorithms Part 1

道 (path)

列‹v0, v1, ... vk›について、

すべての(v[i], v[i+1])がG.Eの元で

あれば、頂点v0からvkへの道

(path)と呼ぶ

10/57

Page 11: Graph Algorithms Part 1

閉路 (cycle)

最初の要素と最後の要素が同じ頂点で

あるような道を閉路(cycle)と呼ぶ

11/57

Page 12: Graph Algorithms Part 1

有向非循環グラフ (DAG)

閉路のない有向グラフを有向非循環グ

ラフ (Directed Acyclic Graph)と

呼ぶ

木はDAGの特殊な場合とみなせる

ただひとつの頂点(根)から他のすべて

の頂点へ道がたどれること

根以外の頂点への根からの道はひとつだ

けであること

12/57

Page 13: Graph Algorithms Part 1

プログラム上のグラフの表現

隣接リスト

0 1

2

53 4

0 → {2, 3}

1 → {1}

2 → {1, 3, 4}

3 → {}

4 → {2}

5 → {}

省メモリだけど転置グラフが作りづらい

13/57

Page 14: Graph Algorithms Part 1

プログラム上のグラフの表現

隣接行列

0 1

2

53 4

0 0 1 1 0 0

0 1 0 0 0 0

0 1 0 1 1 0

0 0 0 0 0 0

0 0 1 0 0 0

0 0 0 0 0 0

メモリ食いだけど転置グラフが作りやすい

14/57

Page 15: Graph Algorithms Part 1

グラフの探索

15/57

Page 16: Graph Algorithms Part 1

グラフの探索

幅優先探索

コード

辺の重みがすべて等しいときの、

最短経路問題の解法とかんがえられる

深さ優先探索

コード

トポロジカルソートなどの解法の一部と

して使われる

16/57

Page 17: Graph Algorithms Part 1

グラフの探索

幅優先探索

a b

c

fd e

Queue = ‹a›

0 ∞

∞ ∞∞

17/57

Page 18: Graph Algorithms Part 1

グラフの探索

幅優先探索

a b

c

fd e

Queue = ‹c, d›

0 ∞

1

1 ∞∞

18/57

Page 19: Graph Algorithms Part 1

グラフの探索

幅優先探索

a b

c

fd e

Queue = ‹d, b, e›

0 2

1

1 2∞

19/57

Page 20: Graph Algorithms Part 1

グラフの探索

幅優先探索

a b

c

fd e

Queue = ‹b, e›

0 2

1

1 2∞

20/57

Page 21: Graph Algorithms Part 1

グラフの探索

幅優先探索

a b

c

fd e

Queue = ‹e›

0 2

1

1 2∞

21/57

Page 22: Graph Algorithms Part 1

グラフの探索

幅優先探索

a b

c

fd e

Queue = ‹›

0 2

1

1 2∞

22/57

Page 23: Graph Algorithms Part 1

グラフの探索

深さ優先探索

a b

c

fd e

まずはaの探索を開始

23/57

Page 24: Graph Algorithms Part 1

グラフの探索

深さ優先探索

a b

c

fd e

aが指している先であるcの探索を開始

24/57

Page 25: Graph Algorithms Part 1

グラフの探索

深さ優先探索

a b

c

fd e

cが指している先であるbの探索を開始

25/57

Page 26: Graph Algorithms Part 1

グラフの探索

深さ優先探索

a b

c

fd e

bが指している先(b自身)はすでに探索済み

したがってbは探索終了

26/57

Page 27: Graph Algorithms Part 1

グラフの探索

深さ優先探索

a b

c

fd e

27/57

Page 28: Graph Algorithms Part 1

グラフの探索

深さ優先探索

a b

c

fd e

28/57

Page 29: Graph Algorithms Part 1

グラフの探索

深さ優先探索

a b

c

fd e

29/57

Page 30: Graph Algorithms Part 1

グラフの探索

深さ優先探索

a b

c

fd e

30/57

Page 31: Graph Algorithms Part 1

グラフの探索

深さ優先探索

a b

c

fd e

cが指している先に未探索の頂点はない

したがってcは探索終了

31/57

Page 32: Graph Algorithms Part 1

グラフの探索

深さ優先探索

a b

c

fd e

aも探索終了

32/57

Page 33: Graph Algorithms Part 1

グラフの探索

深さ優先探索

a b

c

fd e

多くの場合深さ優先探索では全頂点をなめる

トポロジカルソート等での使いやすさのため

33/57

Page 34: Graph Algorithms Part 1

グラフの探索

深さ優先探索

a b

c

fd e

34/57

Page 35: Graph Algorithms Part 1

トポロジカルソート

35/57

Page 36: Graph Algorithms Part 1

トポロジカルソート

トポロジカルソート:

DAGの頂点を、前後関係を保って一列

に並べること

36/57

Page 37: Graph Algorithms Part 1

トポロジカルソート

ある日の家事のDAG

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

37/57

Page 38: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の 砂 抜 き

ア ン チ ョ ビ す り つ ぶ す

ニ ン ニ ク み じ ん 切 り

ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る

ア ン チ ョ ビ つ ま み 食 い

洗 濯 物 を 取 り 入 れ る

白 身 魚 と ア サ リ と ト マ ト を 投 入

蓋 を し て 蒸 す

ア イ ロ ン 掛 け る

手順の例

38/57

Page 39: Graph Algorithms Part 1

トポロジカルソート

アルゴリズム

全頂点を深さ優先探索する

探索が終わった頂点から順番に、

結果列の先頭に追加する

コード

39/57

Page 40: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ∅

40/57

Page 41: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ∅

41/57

Page 42: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ∅

42/57

Page 43: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : 蓋 を し て 蒸 す

43/57

Page 44: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

44/57

Page 45: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

45/57

Page 46: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

46/57

Page 47: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い

→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

47/57

Page 48: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い

→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

48/57

Page 49: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い

→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

49/57

Page 50: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る

→ ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

50/57

Page 51: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る

→ ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

51/57

Page 52: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る

→ ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

52/57

Page 53: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る

→ ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い

→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

53/57

Page 54: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る

→ ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い

→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

54/57

Page 55: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ア ン チ ョ ビ す り つ ぶ す → ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る

→ ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い

→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

55/57

Page 56: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ア ン チ ョ ビ す り つ ぶ す → ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る

→ ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い

→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

56/57

Page 57: Graph Algorithms Part 1

トポロジカルソート

ア サ リ の

砂 抜 き

ア ン チ ョ ビ

す り つ ぶ す

ニ ン ニ ク

み じ ん 切 り

ア ン チ ョ ビ と

ニ ン ニ ク を 炒 め る

蓋 を し て

蒸 す

白 身 魚 と ア サ リ と

ト マ ト を 投 入

ア ン チ ョ ビ

つ ま み 食 い

洗 濯 物

取 り 入 れ る

ア イ ロ ン

掛 け る

結 果 : ニ ン ニ ク み じ ん 切 り → ア ン チ ョ ビ す り つ ぶ す → ア サ リ の 砂 抜 き

→ 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る

→ ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す

57/57