SlideShare une entreprise Scribd logo
1  sur  57
Télécharger pour lire hors ligne
グラフアルゴリズムその1
2017-11-07
宮川 拓
 グラフアルゴリズムを勉強しよう
 背景
 機械学習の部分問題として出てきがち
 ex.物体検出, 形態素解析, ...
 最短経路問題が多そう?
概要
2/57
参考文献
 コルメン他
『アルゴリズム・イントロダクショ
ン』第3版(2013, 近代科学社)
3/57
アジェンダ
 グラフに関する用語と概念
 グラフの探索
 トポロジカルソート
 単一始点最短経路問題(次回)
4/57
グラフに関する用語と概念
5/57
グラフの構成
 グラフ:=
 頂点 (vertex) と、
頂点同士をつなぐ辺 (edge) 、
からなるデータ構造
6/57
グラフの構成
 グラフG=(V, E)
 ただしV={v0, v1, ... v5},
E={e0, e1, ... e5}
v0 v1
v2
v5
v3 v4
e0
e1
e2
e3
e4
e5
e6
7/57
有向グラフと無向グラフ
有向グラフ
無向グラフ
8/57
有向グラフと無向グラフ
 無向グラフは有向グラフの特殊な場合
とみなすこともできる
 つまり、(v0, v1)がG.Eの元であるとき、
必ず(v1, v0)もG.Eの元であるような有
向グラフ、と考えれば良い
9/57
道 (path)
 列‹v0, v1, ... vk›について、
すべての(v[i], v[i+1])がG.Eの元で
あれば、頂点v0からvkへの道
(path)と呼ぶ
10/57
閉路 (cycle)
 最初の要素と最後の要素が同じ頂点で
あるような道を閉路(cycle)と呼ぶ
11/57
有向非循環グラフ (DAG)
 閉路のない有向グラフを有向非循環グ
ラフ (Directed Acyclic Graph)と
呼ぶ
 木はDAGの特殊な場合とみなせる
 ただひとつの頂点(根)から他のすべて
の頂点へ道がたどれること
 根以外の頂点への根からの道はひとつだ
けであること
12/57
プログラム上のグラフの表現
 隣接リスト
0 1
2
5
3 4
0 → {2, 3}
1 → {1}
2 → {1, 3, 4}
3 → {}
4 → {2}
5 → {}
省メモリだけど転置グラフが作りづらい
13/57
プログラム上のグラフの表現
 隣接行列
0 1
2
5
3 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
グラフの探索
15/57
グラフの探索
 幅優先探索
 コード
 辺の重みがすべて等しいときの、
最短経路問題の解法とかんがえられる
 深さ優先探索
 コード
 トポロジカルソートなどの解法の一部と
して使われる
16/57
グラフの探索
 幅優先探索
a b
c
f
d e
Queue = ‹a›
0 ∞
∞
∞ ∞
∞
17/57
グラフの探索
 幅優先探索
a b
c
f
d e
Queue = ‹c, d›
0 ∞
1
1 ∞
∞
18/57
グラフの探索
 幅優先探索
a b
c
f
d e
Queue = ‹d, b, e›
0 2
1
1 2
∞
19/57
グラフの探索
 幅優先探索
a b
c
f
d e
Queue = ‹b, e›
0 2
1
1 2
∞
20/57
グラフの探索
 幅優先探索
a b
c
f
d e
Queue = ‹e›
0 2
1
1 2
∞
21/57
グラフの探索
 幅優先探索
a b
c
f
d e
Queue = ‹›
0 2
1
1 2
∞
22/57
グラフの探索
 深さ優先探索
a b
c
f
d e
まずはaの探索を開始
23/57
グラフの探索
 深さ優先探索
a b
c
f
d e
aが指している先であるcの探索を開始
24/57
グラフの探索
 深さ優先探索
a b
c
f
d e
cが指している先であるbの探索を開始
25/57
グラフの探索
 深さ優先探索
a b
c
f
d e
bが指している先(b自身)はすでに探索済み
したがってbは探索終了
26/57
グラフの探索
 深さ優先探索
a b
c
f
d e
27/57
グラフの探索
 深さ優先探索
a b
c
f
d e
28/57
グラフの探索
 深さ優先探索
a b
c
f
d e
29/57
グラフの探索
 深さ優先探索
a b
c
f
d e
30/57
グラフの探索
 深さ優先探索
a b
c
f
d e
cが指している先に未探索の頂点はない
したがってcは探索終了
31/57
グラフの探索
 深さ優先探索
a b
c
f
d e
aも探索終了
32/57
グラフの探索
 深さ優先探索
a b
c
f
d e
多くの場合深さ優先探索では全頂点をなめる
トポロジカルソート等での使いやすさのため
33/57
グラフの探索
 深さ優先探索
a b
c
f
d e
34/57
トポロジカルソート
35/57
トポロジカルソート
 トポロジカルソート:
 DAGの頂点を、前後関係を保って一列
に並べること
36/57
トポロジカルソート
 ある日の家事のDAG
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
37/57
トポロジカルソート
ア サ リ の 砂 抜 き
ア ン チ ョ ビ す り つ ぶ す
ニ ン ニ ク み じ ん 切 り
ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る
ア ン チ ョ ビ つ ま み 食 い
洗 濯 物 を 取 り 入 れ る
白 身 魚 と ア サ リ と ト マ ト を 投 入
蓋 を し て 蒸 す
ア イ ロ ン 掛 け る
 手順の例
38/57
トポロジカルソート
 アルゴリズム
 全頂点を深さ優先探索する
 探索が終わった頂点から順番に、
結果列の先頭に追加する
 コード
39/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ∅
40/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ∅
41/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ∅
42/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : 蓋 を し て 蒸 す
43/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
44/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
45/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
46/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い
→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
47/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い
→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
48/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い
→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
49/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る
→ ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
50/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る
→ ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
51/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る
→ ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
52/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る
→ ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い
→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
53/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る
→ ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い
→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
54/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ア ン チ ョ ビ す り つ ぶ す → ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る
→ ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い
→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
55/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ア ン チ ョ ビ す り つ ぶ す → ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る
→ ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い
→ 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
56/57
トポロジカルソート
ア サ リ の
砂 抜 き
ア ン チ ョ ビ
す り つ ぶ す
ニ ン ニ ク
み じ ん 切 り
ア ン チ ョ ビ と
ニ ン ニ ク を 炒 め る
蓋 を し て
蒸 す
白 身 魚 と ア サ リ と
ト マ ト を 投 入
ア ン チ ョ ビ
つ ま み 食 い
洗 濯 物
取 り 入 れ る
ア イ ロ ン
掛 け る
結 果 : ニ ン ニ ク み じ ん 切 り → ア ン チ ョ ビ す り つ ぶ す → ア サ リ の 砂 抜 き
→ 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る
→ ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す
57/57

Contenu connexe

En vedette

2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japanese2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japaneseKonrad Malawski
 
Java オブジェクトの内部構造
Java オブジェクトの内部構造Java オブジェクトの内部構造
Java オブジェクトの内部構造Taku Miyakawa
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 ClojureYoshitaka Kawashima
 
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開Seiya Tokui
 
やっとわかったタイピングスピード向上のコツ
やっとわかったタイピングスピード向上のコツやっとわかったタイピングスピード向上のコツ
やっとわかったタイピングスピード向上のコツRyosuke Yamazaki
 
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Taku Miyakawa
 
擬似乱数生成器の評価
擬似乱数生成器の評価擬似乱数生成器の評価
擬似乱数生成器の評価Taku Miyakawa
 
エスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのことエスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのことYoshitaka Kawashima
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力Yoshitaka Kawashima
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354Taku Miyakawa
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧 Ryosuke Yamazaki
 
コルーチンの実装について
コルーチンの実装についてコルーチンの実装について
コルーチンの実装についてTaku Miyakawa
 
JVM言語を使ってみようの歌
JVM言語を使ってみようの歌JVM言語を使ってみようの歌
JVM言語を使ってみようの歌YujiSoftware
 
JDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjugJDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjugYuji Kubota
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javaYuji Kubota
 

En vedette (20)

2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japanese2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japanese
 
Java オブジェクトの内部構造
Java オブジェクトの内部構造Java オブジェクトの内部構造
Java オブジェクトの内部構造
 
エスイーのしごと
エスイーのしごとエスイーのしごと
エスイーのしごと
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
 
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開
 
やっとわかったタイピングスピード向上のコツ
やっとわかったタイピングスピード向上のコツやっとわかったタイピングスピード向上のコツ
やっとわかったタイピングスピード向上のコツ
 
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
 
擬似乱数生成器の評価
擬似乱数生成器の評価擬似乱数生成器の評価
擬似乱数生成器の評価
 
Hadoop jobbuilder
Hadoop jobbuilderHadoop jobbuilder
Hadoop jobbuilder
 
良いコードとは
良いコードとは良いコードとは
良いコードとは
 
エスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのことエスイーが要件定義でやるべきたったひとつのこと
エスイーが要件定義でやるべきたったひとつのこと
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
 
Kink の宣伝
Kink の宣伝Kink の宣伝
Kink の宣伝
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧
 
コルーチンの実装について
コルーチンの実装についてコルーチンの実装について
コルーチンの実装について
 
JVM言語を使ってみようの歌
JVM言語を使ってみようの歌JVM言語を使ってみようの歌
JVM言語を使ってみようの歌
 
JDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjugJDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjug
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷java
 

Graph Algorithms Part 1

  • 2.  グラフアルゴリズムを勉強しよう  背景  機械学習の部分問題として出てきがち  ex.物体検出, 形態素解析, ...  最短経路問題が多そう? 概要 2/57
  • 4. アジェンダ  グラフに関する用語と概念  グラフの探索  トポロジカルソート  単一始点最短経路問題(次回) 4/57
  • 6. グラフの構成  グラフ:=  頂点 (vertex) と、 頂点同士をつなぐ辺 (edge) 、 からなるデータ構造 6/57
  • 7. グラフの構成  グラフG=(V, E)  ただしV={v0, v1, ... v5}, E={e0, e1, ... e5} v0 v1 v2 v5 v3 v4 e0 e1 e2 e3 e4 e5 e6 7/57
  • 9. 有向グラフと無向グラフ  無向グラフは有向グラフの特殊な場合 とみなすこともできる  つまり、(v0, v1)がG.Eの元であるとき、 必ず(v1, v0)もG.Eの元であるような有 向グラフ、と考えれば良い 9/57
  • 10. 道 (path)  列‹v0, v1, ... vk›について、 すべての(v[i], v[i+1])がG.Eの元で あれば、頂点v0からvkへの道 (path)と呼ぶ 10/57
  • 12. 有向非循環グラフ (DAG)  閉路のない有向グラフを有向非循環グ ラフ (Directed Acyclic Graph)と 呼ぶ  木はDAGの特殊な場合とみなせる  ただひとつの頂点(根)から他のすべて の頂点へ道がたどれること  根以外の頂点への根からの道はひとつだ けであること 12/57
  • 13. プログラム上のグラフの表現  隣接リスト 0 1 2 5 3 4 0 → {2, 3} 1 → {1} 2 → {1, 3, 4} 3 → {} 4 → {2} 5 → {} 省メモリだけど転置グラフが作りづらい 13/57
  • 14. プログラム上のグラフの表現  隣接行列 0 1 2 5 3 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
  • 16. グラフの探索  幅優先探索  コード  辺の重みがすべて等しいときの、 最短経路問題の解法とかんがえられる  深さ優先探索  コード  トポロジカルソートなどの解法の一部と して使われる 16/57
  • 17. グラフの探索  幅優先探索 a b c f d e Queue = ‹a› 0 ∞ ∞ ∞ ∞ ∞ 17/57
  • 18. グラフの探索  幅優先探索 a b c f d e Queue = ‹c, d› 0 ∞ 1 1 ∞ ∞ 18/57
  • 19. グラフの探索  幅優先探索 a b c f d e Queue = ‹d, b, e› 0 2 1 1 2 ∞ 19/57
  • 20. グラフの探索  幅優先探索 a b c f d e Queue = ‹b, e› 0 2 1 1 2 ∞ 20/57
  • 21. グラフの探索  幅優先探索 a b c f d e Queue = ‹e› 0 2 1 1 2 ∞ 21/57
  • 22. グラフの探索  幅優先探索 a b c f d e Queue = ‹› 0 2 1 1 2 ∞ 22/57
  • 23. グラフの探索  深さ優先探索 a b c f d e まずはaの探索を開始 23/57
  • 24. グラフの探索  深さ優先探索 a b c f d e aが指している先であるcの探索を開始 24/57
  • 25. グラフの探索  深さ優先探索 a b c f d e cが指している先であるbの探索を開始 25/57
  • 26. グラフの探索  深さ優先探索 a b c f d e bが指している先(b自身)はすでに探索済み したがってbは探索終了 26/57
  • 31. グラフの探索  深さ優先探索 a b c f d e cが指している先に未探索の頂点はない したがってcは探索終了 31/57
  • 33. グラフの探索  深さ優先探索 a b c f d e 多くの場合深さ優先探索では全頂点をなめる トポロジカルソート等での使いやすさのため 33/57
  • 37. トポロジカルソート  ある日の家事のDAG ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 37/57
  • 38. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 を 取 り 入 れ る 白 身 魚 と ア サ リ と ト マ ト を 投 入 蓋 を し て 蒸 す ア イ ロ ン 掛 け る  手順の例 38/57
  • 39. トポロジカルソート  アルゴリズム  全頂点を深さ優先探索する  探索が終わった頂点から順番に、 結果列の先頭に追加する  コード 39/57
  • 40. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ∅ 40/57
  • 41. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ∅ 41/57
  • 42. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ∅ 42/57
  • 43. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : 蓋 を し て 蒸 す 43/57
  • 44. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 44/57
  • 45. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 45/57
  • 46. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 46/57
  • 47. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 47/57
  • 48. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 48/57
  • 49. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 49/57
  • 50. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 50/57
  • 51. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 51/57
  • 52. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 52/57
  • 53. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 53/57
  • 54. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 54/57
  • 55. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ア ン チ ョ ビ す り つ ぶ す → ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 55/57
  • 56. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ア ン チ ョ ビ す り つ ぶ す → ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 56/57
  • 57. トポロジカルソート ア サ リ の 砂 抜 き ア ン チ ョ ビ す り つ ぶ す ニ ン ニ ク み じ ん 切 り ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る 蓋 を し て 蒸 す 白 身 魚 と ア サ リ と ト マ ト を 投 入 ア ン チ ョ ビ つ ま み 食 い 洗 濯 物 取 り 入 れ る ア イ ロ ン 掛 け る 結 果 : ニ ン ニ ク み じ ん 切 り → ア ン チ ョ ビ す り つ ぶ す → ア サ リ の 砂 抜 き → 洗 濯 物 取 り 入 れ る → ア イ ロ ン 掛 け る → ア ン チ ョ ビ と ニ ン ニ ク を 炒 め る → ア ン チ ョ ビ つ ま み 食 い → 白 身 魚 と ア サ リ と ト マ ト を 投 入 → 蓋 を し て 蒸 す 57/57