最短経路問題 輪講会、 20 年 5 月 8 日 ソッメル クリスチャン 東京大学、博士 2 年
最短経路問題 グラフ理論における最短経路問題とは、与えられた重み付きグラフの 2 つのノード間を結ぶエッジの中で、最小の重みを持つ経路を求める問題である。( wikipedia )
アプリケーション タイクストラ(ベーシック) オプチマイゼーション
応用、アプリケーション
応用、アプリケーション 交通 時刻表 社会的ネットワーク、  mixi ウェブグラフ、ページランク
ダイクストラ法  (1959) 優先度つきキュー   ( ヒープ、例えばフィボナジヒープ ) 、インサートスタートノード ゲットミン ゴールではなかったらまだ見た事がなかったら 隣のノード全部に f(x) = スタートからの路程(ろてい)を計算する   ヒープにインサートかアップデート
ダイクストラ法、例 s t A B C D 0 s
ダイクストラ法、例 s t A B C D 5 8 10 12 12 D 10 C 8 A 5 B
ダイクストラ法、例 s t A B C D 5 8 10 12 E F 2 4 15 20 F 12 D 10 C 9 E 7 A
ダイクストラ法、例 s t A B C D 5 8 10 12 E F 2 4 15 。。。 20 F 12 D 10 C 9 E 7 A
ダイクストラ法、例 s t A B C D 5 8 10 12 E F 2 4 15 … … … … … … … … 42 t
ダイクストラ法、問題点 探索スペースが大きい そんな早くもない O(E+V log V)
双方向的なダイクストラ法
双方向的なダイクストラ法 ただ、 グラフ 大きかったら まだ遅い
エースター  (A*)  [Hart, Nilsson, Raphael 68] f( v )=g( v )+h( v ) 、 始点から v までの経路 g(v) 、 始点からの距離 h(v) 、終点までの推定距離、本当な路程より短い
h(v)=0 はダイクストラ法 エースターは一般的な解く方法 どうやって h(v) を計算する ?  プリプロセシング(色々な方法)
エースター デモ (英語で書いててすみません)
プリプロセッシング クエリの前にクエリの為に準備する事 グラフの情報を計算して新規保管 例えば、 経路、間道 極点 :  経路全部計算する トレードオフ、時間、スペース
階層的なアプローチ
階層的なアプローチ
トランシット ノード  [Sanders, Schultes 06] アイディア :  よく高速道路まで行って、走って、出て、ゴールまで行く まわりに高速道路のアクセスが多くない アクセスからアクセスまで全部計算する 道ではなかったら、高速道路は何? 最短経路沢山に使われてるエッジ
トランシット ノード  [Sanders, Schultes 06] アクセスノード テーブル ルッカップ なので すごく早い
対象向けなアプローチ 例えば: arc フラグ
arc フラグ  [Lauther 1997,2004] エッジを使うとどこまで行ける? エッジはどこ行き最短経路の中? 反対側だったら捜さない方が良い 方面 s t
arc フラグという方法 プリプロセッシング パーティション、振り分ける   1 2 3 4
arc フラグという方法 プリプロセッシング エッジ 全部に計算する 1 行き最短経路 の中? 2 行き最短経路 の中? 。。。 1 2 3 4 × 4 × 3 ○ 2 ○ 1
arc フラグという方法 捜す時 どこまで?  4 4行きでは なかったら 捜さない方が良い 4 × 4 × 3 ○ 2 ○ 1
arc フラグという方法
プリプロセッシング、問題点 スペース、時間 ヒューリスティックが多い、時間のバウンドがない、実験だけ グラフが変わったら? も一度? 何回も変わったら? アップデート、ダイナミック
ありがとうございました

最短経路問題

Editor's Notes

  • #2 さいたんけいろもんだい