Skip to content

Commit 2567eae

Browse files
authored
Merge pull request #148 from noshi91/dijkstra
Fibonacci Heap の計測の注釈を変更
2 parents 55a26f3 + de7f501 commit 2567eae

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

_algorithms/dijkstra.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ changelog:
55
authors: kimiyuki
66
reviewers: kuretchi
77
date: 2021-02-12T00:00:00+09:00
8+
- summary: Fibonacci Heap の計測の注釈を変更
9+
authors: noshi91
10+
reviewers:
11+
date: 2021-04-03T18:05:57+09:00
812
algorithm:
913
input: >
1014
非負の辺重み $c : E \to \lbrace x \in \mathbb{R} \mid x \ge 0 \rbrace$ 付き有向グラフ $G = (V, E)$ および頂点 $s \in V$
@@ -37,7 +41,7 @@ Dijkstra 法とは、単一始点最短経路問題を解くアルゴリズム
3741
- Dijkstra 法は辺の重みが整数でかつ最大値が小さいときは優先度付きキューの持ち方を工夫することで計算量を落とせる。この手法は Dial's algorithm と呼ばれる。また特に、辺の重みが $0$ か $1$ のみである場合は 0-1 BFS と呼ばれる[^yosupo-speedup]
3842
- 辺を逆向きにして終点から Dijkstra 法をするとうまくいくことがある。また、始点と終点の両側からの Dijkstra 法がうまくいくこともある。
3943
- 入力されたグラフを拡張して作った別のグラフ上で Dijkstra 法をするとうまくいくことがよくある。これは「拡張グラフでのダイクストラ法」などと呼ばれる。省略して「拡張ダイクストラ」と呼ばれることもあるが、これは不適切な呼び方であると批判されることが多い[^evima-extended-graph]
40-
- Fibonacci heap を用いて適切に実装すると計算量が $O(\vert E \vert + \vert V \vert \log \vert V \vert)$ に落ちる。これは競技プログラミングの範囲内でもグラフによっては速いことがある[^rsk0315-fibonacci][^noshi91-fibonacci][^fibonacci-vs-naive]
44+
- Fibonacci heap を用いて適切に実装すると計算量が $O(\vert E \vert + \vert V \vert \log \vert V \vert)$ に落ちる。これは競技プログラミングの範囲内でもグラフによっては速いことがある[^rsk0315-fibonacci][^noshi91-fibonacci]
4145

4246
## 参考文献
4347

@@ -70,6 +74,6 @@ Dijkstra 法とは、単一始点最短経路問題を解くアルゴリズム
7074

7175
[^yosupo-speedup]: [色々なダイクストラ高速化 - SlideShare](https://www.slideshare.net/yosupo/ss-46612984)<sup>[archive.org](https://web.archive.org/web/20210212144246/https://www.slideshare.net/yosupo/ss-46612984)</sup>
7276
[^evima-extended-graph]: <https://twitter.com/evima0/status/334678901521530880><sup>[archive.org](https://web.archive.org/web/20210212131916/https://twitter.com/evima0/status/334678901521530880)</sup>
73-
[^rsk0315-fibonacci]: <a class="handle">rsk0315</a> の計測によると [AtCoder Regular Contest 064: E - Cosmic Rays](https://atcoder.jp/contests/arc064/tasks/arc064_c)<sup>[archive.org](https://web.archive.org/web/20201101135215/https://atcoder.jp/contests/arc064/tasks/arc064_c)</sup> (完全グラフ) では binary heap より Fibonacci heap の方が速い。(<https://twitter.com/rsk0315_h4x/status/1188898280459005954><sup>[archive.org](https://web.archive.org/web/20210212142947/https://twitter.com/rsk0315_h4x/status/1188898280459005954)</sup>)
74-
[^noshi91-fibonacci]: <a class="handle">noshi91</a> の計測によると [AOJ GRL_1_A: Single Source Shortest Path](https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_A)<sup>[archive.org](https://web.archive.org/web/20210312090744/https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_A)</sup> (疎グラフ) では Fibonacci heap より binary heap の方が速い。(binary heap: <http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=5028837><sup>[archive.org](https://web.archive.org/web/20210214114500/http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=5028837)</sup>, Fibonacci heap: <http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=5028808><sup>[archive.org](https://web.archive.org/web/20201202115901/http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=5028808)</sup>)
77+
[^rsk0315-fibonacci]: <a class="handle">rsk0315</a> の計測によると [AtCoder Regular Contest 064: E - Cosmic Rays](https://atcoder.jp/contests/arc064/tasks/arc064_c)<sup>[archive.org](https://web.archive.org/web/20201101135215/https://atcoder.jp/contests/arc064/tasks/arc064_c)</sup> (完全グラフ) では binary heap より Fibonacci heap の方が速い[^fibonacci-vs-naive]。(<https://twitter.com/rsk0315_h4x/status/1188898280459005954><sup>[archive.org](https://web.archive.org/web/20210212142947/https://twitter.com/rsk0315_h4x/status/1188898280459005954)</sup>)
78+
[^noshi91-fibonacci]: <a class="handle">noshi91</a> の計測によると、Fibonacci Heap が Binary Heap と $O(\lvert V \rvert ^ 2)$ の実装のいずれよりも高速になるようなグラフが存在する。[Binary Heap を用いた Dijkstra 法の最悪ケースと Fibonacci Heap の計測](https://github.com/noshi91/blog/blob/master/pages/dijkstra_experiment.pdf) <sup>[archive.org](https://web.archive.org/web/20210301113825/https://raw.githubusercontent.com/noshi91/blog/master/pages/dijkstra_experiment.pdf)</sup>
7579
[^fibonacci-vs-naive]: これは binary heap を用いた一般的な $O(\vert E \vert \log \vert V \vert)$ の実装との比較であり、密グラフでは Fibonacci heap を用いた実装より単純な $O(\vert V \vert ^ 2)$ の実装の方が速い場合が多いことに注意せよ。

0 commit comments

Comments
 (0)