dijkstraとは?初心者にもわかる最短経路アルゴリズムの解説共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
dijkstraとは?初心者にもわかる最短経路アルゴリズムの解説共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)


dijkstraとは?

dijkstraとは、ある場所から別の場所へ行くときの「最短の道のり」を見つける方法のひとつです。この名前は、アルゴリズムを考案したオランダの計算機科学者 Edsger W. Dijkstra に由来します。

グラフという道と交差点を表す図を使って考えると、辺の重みが距離を表し、頂点が交差点を表します。dijkstraは「今いる場所から目的地までの最短距離を、まだ確かめていない地点の中で最も近い所から順番に確かめていく」やり方です。

背景と成り立ち

昔の地図検索や路線案内で役に立つアイデアとして生まれました。非負の辺の重みを前提にすると、最短距離を確実に更新していくことができます。

アルゴリズムの基本の考え方

dijkstraの基本は、次の3つのステップひたすら繰り返すことです。

1. 初期化:始点の距離を0、他のノードの距離を無限大に設定します。たとえば地図の開始地点から他の地点までの初期推定距離を用意します。

2. 未確定ノードの中から最も距離が短いものを選ぶ:まだ確定していないノードの中で、現在の推定距離が最も小さいものを選びます。選ばれたノードは確定済みとします。

3. 距離の更新:選ばれたノードの隣接ノードについて、間にある辺の重みを使って「新しい経路」が今までの推定距離より短いかを調べ、短くなる場合は距離を更新します。

これをすべてのノードが確定するまで、または確認できる最短距離が決まるまで繰り返します。

実例と手順のイメージ

以下は、簡単なグラフを使った実例の流れを表にしたものです。

<th>ステップ
説明
1 初期化 始点を0、他を∞に設定
2 最小の未確定ノードを選ぶ 現在の最短距離が最小のノードを選択
3 隣接ノードの距離を更新 隣接の経路が短くなる場合に更新
4 ノードを確定 確定したノードは再計算の対象外
5 すべてのノードが確定するまで繰り返す 目的地の距離が得られるまで進む

応用と注意点

dijkstraは、道路網の最短経路探索、通信ネットワークの経路選択、ゲームのマップ計算など、さまざまな場面で活躍します。ただし、辺の重みが負の値をとる場合には適用できません。その場合は、別のアルゴリズム(ベルマン-フォード法など)を使います。

まとめとポイント

最も大事な点は、「最も距離が短い未確定ノードを選び、隣接ノードの距離を更新する」という循環を回すことです。これにより、始点からすべての点への最短距離を順番に確定していくことができます。

よくある誤解

「最短距離を一度見つけたら、それ以降は変わらない」というのは間違いです。新しい経路が見つかると、距離は更新されることがあります。

用語のまとめ

頂点:グラフの交差点のような点、:二つの点を結ぶ道のこと、重み:辺を通る距離やコストのことです。


dijkstraの同意語

ダイクストラ法
最短経路を求める代表的なアルゴリズムの名称。非負の重み付きグラフに対して、始点から全ての頂点への最短距離を計算します。
ダイクストラのアルゴリズム
ダイクストラ法と同じ意味の別表現。アルゴリズム名の言い換えとしてよく使われます。
最短経路アルゴリズム(ダイクストラ法)
最短経路を見つけるアルゴリズムのひとつで、特に非負の重みを持つグラフに適用します。
最短距離アルゴリズム(ダイクストラ法)
始点から他の頂点までの最短距離を求める手法の別表現。ダイクストラ法を指す言い換えです。
Dijkstra's algorithm
英語表記の正式名称。日本語では『ダイクストラ法』と同じアルゴリズムを指します。
Dijkstra
人名表記。アルゴリズムの名称を指す場面で使われることがありますが、文脈で人物を指すこともある点に注意してください。

dijkstraの対義語・反対語

最長経路アルゴリズム
グラフ上で最も長い経路を探索・算出することを目的とするアルゴリズム。ダイクストラが最短経路を求めるのに対し、長さの最大化を追求します。ただし、サイクルがあると経路が無限に長くなる問題など、取り扱いには注意が必要です。
全点間最短経路アルゴリズム
グラフの任意の2点間について最短距離を求めるアルゴリズム。単一始点のダイクストラとは対照的に、全ての点の組み合わせを対象にします。代表例にはフロイド–ワーシャル法などがあります。
非貪欲アルゴリズム
局所的に最良の選択を繰り返す貪欲法とは反対に、全体の最適性を重視する探索手法。ダイクストラが貪欲性の代表例とされることがあるため、対になる概念として挙げられます。
完全探索法(総当たり法)
考えられるすべての解を網羅して最適解を見つける方法。計算量が膨大になることが多く現実的ではない場合が多いですが、解の最適性を保証します。
近似解法
厳密な最適解を必ずしも求めず、近い解を迅速に得る方法。ダイクストラの厳密性と対比される場面で使われることがあります。
負の重みを扱うアルゴリズム
負の重みを含むグラフにも対応可能な解法。ダイクストラは負の重みに対応できないため、その代替として用いられることが多い代表例にはベルマン‑フォード法などがあります。

dijkstraの共起語

ダイクストラ法
最短経路問題を解く基本的なアルゴリズムの1つ。始点からすべてのノードへの最短距離を求め、負の辺がない重み付きグラフで正しく動作します。実装には通常、優先度付きキューを使って効率化します。
Dijkstra
英語表記のアルゴリズム名。日本語の『ダイクストラ法』と同義で用いられることが多いです。
dijkstra
ダイクストラ法の小文字表記。英語論文やライブラリ名などで見かけます。
最短経路
始点から各ノードへ到達する際のコストが最小になる経路と、その距離のことです。
グラフ
ノード(頂点)とエッジ(辺)からなるデータ構造。道順・ネットワークなどを表します。
頂点(ノード)
グラフの点。計算の対象となる場所や状態を表します。
辺(エッジ)
頂点と頂点を結ぶ接続。重み付きの場合はコストが付いています。
重み付きグラフ
辺にコスト(重み)が設定されているグラフのこと。
重み
エッジに付随するコスト。通常は非負整数や実数で表現します。
非負重み
すべての辺の重みが0以上である状態。ダイクストラ法はこれを前提に動作します。
負の辺なし
グラフに負の重みの辺が存在しないこと。ダイクストラ法が安全に使える条件の1つです。
始点/スタートノード
アルゴリズラムの計算を開始するノード。
終点/ゴール
到達を目指すノード。必ずしも1つとは限らず、全ノードを対象にすることもあります。
距離
始点から各ノードへ到達するまでの現在の推定コスト(最短距離の候補)。
最短距離
特定のノードへ到達するための確定した最小コストの距離。
未確定ノード
まだ最短距離が確定していないノード。
確定ノード
これまでに最短距離が確定したノード。
前のノード/親ノード
あるノードへ行く経路上での直前のノード。経路復元に使います。
優先度付きキュー
距離が小さいノードを優先して取り出すデータ構造。ダイクストラ法の速度を左右します。
ヒープ
優先度付きキューを実装する代表的なデータ構造の1つ。効率的な挿入・削除が可能です。
計算量
一般的な実装では時間計算量が O((V+E) log V) もしくは O(E log V) 程度。空間計算量は O(V)。
実装言語
実装に使われるプログラミング言語の例。例: Python, C++, Java など。
ライブラリ
グラフ操作を簡略化するライブラリの例。NetworkX(Python)など。
隣接リスト
グラフを表現する方法の1つ。各ノードが接続する隣接ノードの一覧を持ちます。
隣接行列
別の表現方法。ノード同士の結びつきを行列で表します。
応用例
地図アプリのルーティング、ネットワーク設計、ゲームの経路探索など、最短経路が必要な場面に使われます。
注意点
負の辺があると正しく動作しません。連結性の扱い、初期化の無限大、実装上の細かなポイントなど。

dijkstraの関連用語

ダイクストラ法
単一の出発点から、非負の辺の重みを持つ重み付きグラフの全ての頂点への最短距離を求める貪欲法のアルゴリズムです。
最短経路問題
グラフ上のある始点から別の頂点へ行くとき、距離が最も小さい経路を見つける問題の総称です。
単一始点最短経路問題 (SSSP)
1つの始点からすべての頂点への最短経路を求める問題。ダイクストラ法はこの問題を解く代表例です。
グラフ
頂点と辺で構成されるデータ構造。実世界の地図やネットワークを抽象化したもの。
重み付きグラフ
辺にコストや距離などの重みが設定されているグラフ。
非負の辺
すべての辺の重みが0以上である条件。ダイクストラ法での前提となることが多いです。
出発点(ソース
最短経路を求める起点となる頂点。
頂点(ノード)
グラフの点。例: 町・ルータ・交差点など。
辺(エッジ)
頂点と頂点を結ぶ線。重みがある場合はそのコストを表します。
隣接リスト
各頂点に接続する隣接頂点を列挙するグラフの表現方法。
隣接行列
全頂点対の辺の有無と重みを行列として表現する方法。
距離配列
各頂点への現在の推定最短距離を格納する配列。
初期化
距離を無限大で初期化し、出発点の距離を0に設定すること。
辺の緩和
ある辺を使って、未確定の距離を改善できるかを確認する操作。
確定済みノード
すでに最短距離が確定した頂点の集合。
前任ノード
各頂点へ行く最短経路の直前の頂点を記録する指標。
経路復元
前任ノードを辿って始点から目標点までの経路を取り出す方法。
最短経路木
出発点を根とする、全頂点へ至る最短経路を結ぶ木。
最小ヒープ / 優先度付きキュー
次に処理する頂点を選ぶためのデータ構造。最小の距離を持つ頂点を取り出します。
距離更新(緩和)条件
新しい経路の距離が従来より小さい場合のみ距離を更新する条件。
辺の緩和の頻度
アルゴリズム全体で多くの緩和を行い、距離を段階的に改善していく性質。
計算量
隣接リストと二分ヒープを使う場合の時間計算量は O((V+E) log V)。空間計算量は O(V+E)。
貪欲法
局所的に最良の選択を次々に採る戦略。ダイクストラは貪欲法の代表例です。
負の辺を扱えない点
ダイクストラ法は負の辺があると正しく動作しない欠点があります。
ベルマン-フォード法
負の辺を含むグラフにも対応可能な最短経路アルゴリズム。負の閉路を検出できます。
0-1 BFS
辺の重みが0または1の特殊ケースで、dequeを使って高速に最短経路を求める技法。
アプリケーション
地図の経路案内、ネットワークのルーティング、ロジスティクスの最適化など。
歴史・人物
このアルゴリズムはEdsger W. Dijkstraにより発案・命名されました。

dijkstraのおすすめ参考サイト


学問の人気記事

トルクの単位・とは?初心者向けに徹底解説!なぜ単位が違うのかまで分かる共起語・同意語・対義語も併せて解説!
2140viws
引用・参考文献とは?初心者でもわかる使い方とポイント解説共起語・同意語・対義語も併せて解説!
837viws
ensureとは?初心者にもわかる意味と使い方を徹底解説共起語・同意語・対義語も併せて解説!
714viws
座標計算・とは?初心者向けガイドで完全マスター共起語・同意語・対義語も併せて解説!
689viws
絶縁抵抗値とは?初心者でも分かる測定の基本と安全のコツ共起語・同意語・対義語も併せて解説!
582viws
示差走査熱量測定とは?初心者向けガイドで学ぶ基本と実験のポイント共起語・同意語・対義語も併せて解説!
564viws
no・とは?初心者にもわかる意味と使い方ガイド共起語・同意語・対義語も併せて解説!
558viws
k型熱電対とは?初心者にも分かる基礎解説と活用事例共起語・同意語・対義語も併せて解説!
528viws
ナイロン樹脂とは?初心者にもわかる基本と用途ガイド共起語・同意語・対義語も併せて解説!
523viws
大辞林とは?初心者にもわかる日本語辞典の使い方と特徴共起語・同意語・対義語も併せて解説!
500viws
welchのt検定とは?不等分散のデータを比較する統計手法をやさしく解説共起語・同意語・対義語も併せて解説!
481viws
論述問題・とは?初心者にも分かる解説と解き方のコツ共起語・同意語・対義語も併せて解説!
463viws
summarize・とは?初心者向け解説と使い方のコツ共起語・同意語・対義語も併せて解説!
454viws
気圧の単位とは?中学生にもわかるPa・atm・bar・Torrの違いと換算ガイド共起語・同意語・対義語も併せて解説!
447viws
励磁回路とは?初心者にもわかる基礎解説と仕組みの全体像共起語・同意語・対義語も併せて解説!
438viws
穴加工・とは?初心者が知っておく基本と現場での活用ポイント共起語・同意語・対義語も併せて解説!
430viws
洗浄バリデーションとは?初心者が押さえる基本と実務のポイント共起語・同意語・対義語も併せて解説!
404viws
摘要とは?初心者にも分かる意味と書き方ガイド共起語・同意語・対義語も併せて解説!
401viws
r134aとは?初心者向けガイド|エアコン冷媒の基本をやさしく解説共起語・同意語・対義語も併せて解説!
389viws
z変換・とは?初心者が知っておくべき基礎と日常への応用共起語・同意語・対義語も併せて解説!
376viws

新着記事

学問の関連記事