Presentation is loading. Please wait.

Presentation is loading. Please wait.

グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29.

Similar presentations


Presentation on theme: "グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29."— Presentation transcript:

1 グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29

2 目次 研究背景・目標 ダイクストラ法 クラスカル法 OpenGLを用いた実装 まとめ 2018/12/29

3 OpenGLを用いて 三次元のグラフアルゴリズムを可視化
1.研究背景・目標 グラフアルゴリズムの学習 C言語にてダイクストラ法・クラスカル法を実装 処理結果をPGM形式にして出力 OpenGLを用いて 三次元のグラフアルゴリズムを可視化 結果だけでなく過程も見えるようにする 2018/12/29

4 2.ダイクストラ法 2.1 ダイクストラ法とは Edsger Wybe Dijkstra による(1959)
2.1 ダイクストラ法とは Edsger Wybe Dijkstra による(1959) グラフ理論における最短経路問題を解く手法 スタートノードからゴールノードまでの最短距離を求める ダイクストラ法の利用先 カーナビゲーションの経路探索 鉄道の経路案内 など 今回はゴールノードを指定しない 全ノードへの最短距離を求められる 2018/12/29

5 2.ダイクストラ法 2.2 アルゴリズム 全ノード間のコスト(距離)を+∞に初期化し さらに状態を「未使用」としておく.
2.2 アルゴリズム 全ノード間のコスト(距離)を+∞に初期化し さらに状態を「未使用」としておく. 全ノードの座標と, 辺の有無とをランダムに決定し 辺がある場合はその長さをコストとする. また, スタートノードSを指定する. 1 3 4 S 2 【現時点でのコスト】 ノード1…1 ノード2…3 ノード3…+∞ 2018/12/29

6 2.ダイクストラ法 2.2 アルゴリズム ③ Sからのコストが最小となる未使用ノードXを探す. 【現時点でのコスト】 ノード1…1(確定)
2.2 アルゴリズム ③ Sからのコストが最小となる未使用ノードXを探す. また, Xにつながる全てのノードYに対し, 「Yの現在のコスト」>(「X→Yの距離」+「Xのコスト」) を満たした場合, Yのコストを更新する. アルゴリズムを終了する. 1 3 4 S 2 【現時点でのコスト】 ノード1…1(確定) ノード2…2(コスト更新) ノード3…5(コスト更新) 2018/12/29

7 2.ダイクストラ法 2.2 アルゴリズム ③ Sからのコストが最小となる未使用ノードXを探す. 【現時点でのコスト】 ノード1…1(確定)
2.2 アルゴリズム ③ Sからのコストが最小となる未使用ノードXを探す. また, Xにつながる全てのノードYに対し, 「Yの現在のコスト」>(「X→Yの距離」+「Xのコスト」) を満たした場合, Yのコストを更新する. アルゴリズムを終了する. 1 3 4 S 2 【現時点でのコスト】 ノード1…1(確定) ノード2…2(確定) ノード3…5 2018/12/29

8 2.ダイクストラ法 2.2 アルゴリズム ③ Sからのコストが最小となる未使用ノードXを探す. 【現時点でのコスト】 ノード1…1(確定)
2.2 アルゴリズム ③ Sからのコストが最小となる未使用ノードXを探す. また, Xにつながる全てのノードYに対し, 「Yの現在のコスト」>(「X→Yの距離」+「Xのコスト」) を満たした場合, Yのコストを更新する. アルゴリズムを終了する. 1 3 4 S 2 【現時点でのコスト】 ノード1…1(確定) ノード2…2(確定) ノード3…5(確定) 2018/12/29

9 2.ダイクストラ法 2.3 実装 ノードの構造体 2018/12/29

10 2.ダイクストラ法 2.3 実装 確定ノード決定・コスト更新 確定ノード決定 コスト更新 2018/12/29

11 3.クラスカル法 3.1 クラスカル法とは Joseph Kruskal による(1956) グラフ理論における最小全域木問題を解く手法
3.1 クラスカル法とは Joseph Kruskal による(1956) グラフ理論における最小全域木問題を解く手法 全てのノードを閉路が含まれないように結合し, 辺の重みの総和が最小となるような木を求める. 貪欲アルゴリズムの一種 2018/12/29

12 3.クラスカル法 3.2 アルゴリズム グラフの各頂点がそれぞれの木に属するように 森(木の集合) F を生成する.
3.2 アルゴリズム グラフの各頂点がそれぞれの木に属するように 森(木の集合) F を生成する. グラフの全ての辺を含む集合 S を生成する. 11 4 7 8 1 14 6 c e d a b 2018/12/29

13 3.クラスカル法 3.2 アルゴリズム ③ S が空集合になるまで以下を繰り返す. S から重みが最小の辺を削除する.
3.2 アルゴリズム ③ S が空集合になるまで以下を繰り返す. S から重みが最小の辺を削除する. その辺が2つの木を連結するものならば それを森に加え, 2つの木を1つにまとめる. そうでない場合は単に捨てる. 11 4 7 8 1 14 6 c e b d a 2018/12/29

14 3.クラスカル法 3.2 アルゴリズム ③ S が空集合になるまで以下を繰り返す. S から重みが最小の辺を削除する.
3.2 アルゴリズム ③ S が空集合になるまで以下を繰り返す. S から重みが最小の辺を削除する. その辺が2つの木を連結するものならば それを森に加え, 2つの木を1つにまとめる. そうでない場合は単に捨てる. 11 4 7 8 1 14 6 c e b d a 2018/12/29

15 3.クラスカル法 3.2 アルゴリズム ③ S が空集合になるまで以下を繰り返す. S から重みが最小の辺を削除する.
3.2 アルゴリズム ③ S が空集合になるまで以下を繰り返す. S から重みが最小の辺を削除する. その辺が2つの木を連結するものならば それを森に加え, 2つの木を1つにまとめる. そうでない場合は単に捨てる. 11 4 7 8 1 14 6 c e b d a 2018/12/29

16 3.クラスカル法 3.2 アルゴリズム ③ S が空集合になるまで以下を繰り返す. S から重みが最小の辺を削除する.
3.2 アルゴリズム ③ S が空集合になるまで以下を繰り返す. S から重みが最小の辺を削除する. その辺が2つの木を連結するものならば それを森に加え, 2つの木を1つにまとめる. そうでない場合は単に捨てる. 11 4 7 8 1 14 6 c e b d a 2018/12/29

17 3.クラスカル法 3.3 実装 辺の構造体 2018/12/29

18 3.クラスカル法 3.3 実装 最小経路を発見・木を結合 重みの配列をソート 最短経路発見 2018/12/29

19 4.OpenGLを用いた実装 4.1 ノードの描画 例:ダイクストラのノード描画 不確定ノードは水色 確定ノードは青 2018/12/29

20 4.OpenGLを用いた実装 4.2 エッジの描画 例:クラスカルの辺 最短経路は黄色 使ってない経路は水色 2018/12/29

21 4.OpenGLを用いた実装 4.3 視点変更 図を回転表示するときの工夫 視点の位置によって 画面の上方向を変える 2018/12/29

22 4.OpenGLを用いた実装 4.4 ダイクストラ ランダムに ノードを10個生成 エッジを ランダムに生成 黄色は スタートノード
4.4 ダイクストラ ランダムに ノードを10個生成 エッジを ランダムに生成 黄色は スタートノード 2018/12/29

23 4.OpenGLを用いた実装 4.4 ダイクストラ マウスを クリックするごとに 1ステップ進める 確定ノードは 青く塗る
4.4 ダイクストラ マウスを クリックするごとに 1ステップ進める 確定ノードは 青く塗る 使用するエッジは 黄色く塗る 2018/12/29

24 4.OpenGLを用いた実装 4.4 ダイクストラ 全てのノードへの最短経路を 見つける 2018/12/29

25 4.OpenGLを用いた実装 4.4 ダイクストラ キーボード操作によって回転 2018/12/29

26 4.OpenGLを用いた実装 4.4 ダイクストラ キーボード操作によって拡大・縮小 2018/12/29

27 4.OpenGLを用いた実装 4.5 クラスカル ランダムにノードを10個生成 全てのノードを つなぐエッジを生成
4.5 クラスカル ランダムにノードを10個生成 全てのノードを つなぐエッジを生成 道を増やすため さらにランダムに エッジを生成 2018/12/29

28 4.OpenGLを用いた実装 4.5 クラスカル マウスを クリックするごとに 1ステップ進める 確定エッジを 黄色く塗る
4.5 クラスカル マウスを クリックするごとに 1ステップ進める 確定エッジを 黄色く塗る 2018/12/29

29 4.OpenGLを用いた実装 4.5 クラスカル マウスを クリックするごとに 1ステップ進める 確定エッジを 黄色く塗る
4.5 クラスカル マウスを クリックするごとに 1ステップ進める 確定エッジを 黄色く塗る 2018/12/29

30 5.まとめ 苦労したこと 工夫したこと OpenGLの処理に合わせたプログラムの分割. 図を回転させる際の視点の設定.
図を見やすくするために, ランダムに定める ノードの間隔を調整した. 2018/12/29


Download ppt "グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29."

Similar presentations


Ads by Google