この記事の目的ダイクストラ法の計算量は、O(ElogV)である。 仮に、エッジの長さが0か1ならばO(E)、つまりエッジの数に比例することになる。 「どうしてそうなるのか全く理解出来ない」と誰でも思うだろう。 優先度キューを使ってBFSで探索していけば、毎回エッジの分だけ分岐があるんだから なんらかの計算量はその分岐がどんどん積み重なっていき、 指数オーダーになってしかるべきだろう。 ふつうの人はそう考える。 どういうメカニズムで探索が省略されているのかなんとなく木を書き出して考えてみても、 なんとなくわかった気になったあとでやっぱりわからんとなる。 それが、ダイクストラ法を題材にしたちょっとした応用問題が出た時に手も足も出なくなる原因である。 グラフがぽいっと渡されて、はいs-t最短距離を計算してくださいと言われたら、 準備していたライブラリに食わせて終わりだが、 よく考えるとグラフ探索
![【競技プログラミング】ダイクストラ法の計算量はなぜO(E)なのか](https://cdn-ak-scissors.b.st-hatena.com/image/square/a064c2ab6f2ec5cbd540e25045fa87576d71eeff/height=288;version=1;width=512/https%3A%2F%2Fwww.akiradeveloper.com%2Flogo%2Fgaaradio-hello.jpg)