Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Graph Algorithms Part 1

476 views

Published on

Graph Algorithms Part 1

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Graph Algorithms Part 1

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

×