Dijkstra 法

これはステージング環境です。5 秒後に自動的に本番環境 (https://noshi91.github.io/algorithm-encyclopedia) にリダイレクトされます。リダイレクトを抑止したい場合は #noredirect を付けた URL /algorithm-encyclopedia/dijkstra#noredirect を利用してください。
name
Dijkstra 法
short description
Dijkstra 法とは、単一始点最短経路問題を解くアルゴリズムのひとつ。グラフに負の辺があると動作しない。辺が非負という仮定をもとに動的計画法を利用して高速に動作し、計算量は O(V2)O(\vert V \vert ^ 2)O(ElogV)O(\vert E \vert \log \vert V \vert) などである。
input
非負の辺重み c:E{xRx0}c : E \to \lbrace x \in \mathbb{R} \mid x \ge 0 \rbrace 付き有向グラフ G=(V,E)G = (V, E) および頂点 sVs \in V
output
各頂点 tVt \in V に対し ss-tt 最短路長
time complexity
O(V2)O(\vert V \vert ^ 2)O(ElogV)O(\vert E \vert \log \vert V \vert) など

概要

Dijkstra 法とは、単一始点最短経路問題を解くアルゴリズムのひとつである。グラフに負の辺があると動作しない。辺が非負という仮定をもとに動的計画法を利用する。 計算量は、単純な実装では O(V2)O(\vert V \vert ^ 2) である。優先度付きキューを用いる実装では、優先度付きキューに何を使うかに依存し、Binary Heap を用いた場合は O(ElogV)O(\vert E \vert \log \vert V \vert) である。

単一始点最短経路問題を解くとは、辺に重みが付いた有向グラフ GG と頂点 ss が与えられたとき、ss を始点とする ss-tt 最短経路をすべての頂点 tt に対して求めるということである。

詳細

(省略)

その他

参考文献

関連項目

外部リンク

注釈

  1. 色々なダイクストラ高速化 - SlideSharearchive.org  2

  2. https://twitter.com/evima0/status/334678901521530880archive.org 

  3. rsk0315 の計測によると AtCoder Regular Contest 064: E - Cosmic Raysarchive.org (完全グラフ) では binary heap より Fibonacci heap の方が速い5。(https://twitter.com/rsk0315_h4x/status/1188898280459005954archive.org

  4. noshi91 の計測によると、Fibonacci Heap が Binary Heap と O(V2)O(\lvert V \rvert ^ 2) の実装のいずれよりも高速になるようなグラフが存在する。Binary Heap を用いた Dijkstra 法の最悪ケースと Fibonacci Heap の計測 archive.org 

  5. これは binary heap を用いた一般的な O(ElogV)O(\vert E \vert \log \vert V \vert) の実装との比較であり、密グラフでは Fibonacci heap を用いた実装より単純な O(V2)O(\vert V \vert ^ 2) の実装の方が速い場合が多いことに注意せよ。