利用者:Fujimoto/最短路問題のソースを表示
←
利用者:Fujimoto/最短路問題
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、以下のグループに属する利用者のみが実行できます:
登録利用者
。
このページは編集や他の操作ができないように保護されています。
このページのソースの閲覧やコピーができます。
'''【さいたんろもんだい (shortest path problem)】''' == 概要 == <!-- 原稿では概要、詳説という分け方になっていないのですが、どうしましょうかね。 --> 最短路問題は経路探索などの多くの応用を持ち, また他の[[最適化問題]]の子問題として用いられることも多く, 適用範囲の広い組合せ最適化問題である. そのため, 最短路問題を高速に解くことは重要な意味を持つ. 最短路問題に対する解法には, 安定的かつ効率的な高速な[[アルゴリズム]]が存在するが, 実問題は大規模(全米の道路ネットワークでは, 2400万点, 5800万枝にも及ぶ)になるため高速化が不可欠である.本解説では最短路問題の定義・種類を述べた後, 著名なアルゴリズムである[[ダイクストラ法]]に対する高速実装と実験結果等について説明を行う. == 詳説 == === 最短路問題の定義と種類 === 最短路問題は次のような問題である. <!-- 原稿では影付きボックスですが、それはさすがに難しいので単なるquotationにしています --> <blockquote> ある有向グラフ<math>G = (V, E)</math> と各枝 <math>(v,w) \in E</math> に重み <math>l(v,w)</math> が付与されているネットワーク <math>N = (G,l)</math> が与えられているとする. このとき有向グラフ <math>G</math> の任意の 2 点 <math>s, t \in V</math> に対し, 点 <math>s</math> を始点とし, 点 <math>t</math> を終点とする有向パス <math>p</math> の中で, その長さ(パスに含まれる枝の重みの合計)が最小のパスを点 <math>s</math> から点 <math>t</math> への最短路 (shortest path) といい, 最短路を求める問題を最短路問題 (shortest path problem) という. </blockquote> 最短路問題は次のように 3 種類に分けることができる. ;1対全(single-source)最短路問題: 1点から全点に対する最短路と最短距離(最短路の長さ)を求める問題. 非負の枝の重みを持つグラフ上ではダイクストラ(Dijkstra)法が, 負の重みを持つ枝がある場合にはベルマン・フォード(Bellman-Ford)法が有名である. ;全対全(all-pairs)最短路問題: 全点間の最短路と最短距離を求める問題. ワーシャル・フロイド(Warshall-Folyd)法が有名であるが, 1対全最短路問題アルゴリズムを各点に対して適用することでも求めることができる. ;1対1(point-to-point)最短路問題: 2点間の最短路と最短距離を求める問題. === 探索アルゴリズムと実装方法 === 最短路問題に関する探索アルゴリズムの中でも, 最も頻繁に利用されるダイクストラ法を取り上げ, アルゴリズムの説明から, 高速化のための優先キューの適用方法・実装方法について示していく. ==== ダイクストラ法 ==== 1959年, E. W. Dijkstra<ref>E. W. Dijkstra, "A Note on Two Problems in Connexion with Graphs," Numerische Mathematik, 1:269-271, 1959.</ref>によって提案された1 対全最短路問題に対するアルゴリズムである. 探索するグラフ上の全ての枝の重みが非負でなければならないが, ベルマン・フォード法{{ref|bellman}} に比べ効率的かつ高速である.ダイクストラ法は, ベルマン・フォード法と同じように動的計画法の一種とみなすことができるが, 点の探索の順序に特徴をもつ. 探索の途中で得られた始点 <math>s</math> からの距離の最小値をポテンシャルもしくは距離ラベルとよび, その値の小さい順に点の探索を行い,最短路および最短距離を確定していく. つまり, 各点に対し, <math>d(s) = 0, d(v) = +\infty (v \in V)</math> とするポテンシャル <math>d</math> を用意し, 探索点 <math>v</math> に接続する枝 <math>(v,w)</math> に対して, <math>d(v) + l(v,w) < d(w)</math> ならば <math>d(w) := l(v,w) + d(v)</math> とする操作を繰り返し行う. 終点 <math>t</math> が探索点になった時点で終了させることで, 1対1最短路問題も効率的に求解可能である.
利用者:Fujimoto/最短路問題
に戻る。
案内メニュー
個人用ツール
ログイン
名前空間
利用者ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
その他
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ORWikiへのお問い合わせ
OR学会HP
OR学会アーカイブ集
ツール
リンク元
関連ページの更新状況
利用者の投稿記録
記録
利用者グループの表示
特別ページ
ページ情報