ダイクストラ アルゴリズムの標準的な実装の 1 つは、ヒープを使用して、開始ノード S から未調査のすべてのノードまでの距離を格納します。ヒープを使用する理由は、ヒープから最小距離を効率的にポップできることO(log n)
です。ただし、アルゴリズムの不変条件を維持するには、ヒープ内の距離の一部を更新する必要もあります。これには以下が含まれます。
- ヒープから非最小要素をポップする
- 更新された距離の計算
- それらをヒープに戻す
O(log n)
ヒープ内のその要素の場所を知っていれば、ヒープから非最小要素をポップできることを理解しています。ただし、ダイクストラ アルゴリズムの場合、この場所を知る方法がわかりません。二分探索木がより適切であるように思えます。
より一般的には、ヒープがバランスのとれた二分探索木よりも優れているのは、min 要素に (削除せずに) アクセスすることだけだと理解しています。私の理解は正しいですか?