[解決済み] ベルマンフォードとダイクストラの比較。どのような状況下でベルマンフォードが優れているか?
質問
いろいろとググってみたところ、ほとんどの情報源で、ダイクストラ・アルゴリズムはベルマン-フォード・アルゴリズムよりも"効率的"であると書かれていることがわかりました。しかし、どのような状況であれば、ベルマンフォードアルゴリズムはダイクストラアルゴリズムよりも優れているのでしょうか?
具体的には、スピードと、スペースという意味です。ベルマンフォードアプローチがダイクストラアプローチより優れている状況があることは確かです。
どのように解決するのですか?
ベルマンフォードアルゴリズムはシングルソースの最短経路アルゴリズムなので、負のエッジの重みがある場合、グラフ内の負のサイクルを検出することができます。
両者の唯一の違いは、ベルマンフォードは負の重みも扱えるのに対して、ダイクストラアルゴリズムは正の重みしか扱えないことである。
より ウィキ
しかし、Dijkstraのアルゴリズムでは、貪欲に最小重量のノード この緩和処理は、まだ処理されていないものに対して行われます。 これに対して、ベルマンフォードアルゴリズムは、そのすべての出射エッジに対して 単純にすべてのエッジを緩和し、これを|V|-1回行う、ここで|V|は はグラフの頂点の数である。この繰り返しのそれぞれで 正しく計算された距離を持つ頂点の数が増え、そこから であり、最終的にはすべての頂点が正しい値を持つことになる。 の距離です。 この方法によって、ベルマンフォードアルゴリズムを適用することができます。 は、Dijkstraよりも広い範囲の入力に対応することができます。
しかし、Dijkstraは一般的に負の重みのエッジがない場合に優れていると考えられており、典型的なバイナリヒープ優先順位キューの実装はO((|E|+|V|)log|V|)の時間複雑性を持ち[フィボナッチヒープ優先順位キューはO(|V|log|V| + |E|)を与える]、ベルマン-フォードアルゴリズムは O(|V||E|) 複雑性を持っているからである。
関連
-
[解決済み】パックマン:主にどのようなヒューリスティックが使われているのですか?
-
[解決済み] どのようにすれば、ほとんどすべてのアルゴリズムを修正して、最良の場合の実行時間を持つようにできるか?
-
[解決済み] CLRSの相対的漸近成長に関する問題(表)の解き方について教えてください。
-
[解決済み] ラジアンを度数に変換する方法は?
-
[解決済み] グラフが半連結であるか否かを判定する
-
[解決済み] log(n!)=Θ(n-log(n))でしょうか?
-
[解決済み] 隣接リスト表現の時間複雑性?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] ある問題がNP完全であることをどのように証明するか?
-
[解決済み] 二分探索木におけるk番目の最小要素を最適な方法で探す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Quickselectの時間の複雑さを説明する
-
[解決済み】クイックソートとヒープソートの比較
-
[解決済み】whileループの時間複雑性とは?
-
[解決済み] グラフにおいて最小容量が最大となる経路の探索
-
[解決済み] このHeld-Karp TSP Pseudocodeの説明をお願いします。
-
[解決済み] 簡単:T(n)=T(n-1)+nを反復法で解く。
-
[解決済み] アルゴリズムの教科書では、ソートされた配列について「増加」ではなく「非減少」を使っているのはなぜですか?
-
[解決済み] ヒープ構築のトップダウン・アプローチはボトムアップよりも成長度合いがO(n)よりもO(log n)低いにもかかわらず、なぜ効率が悪いのでしょうか?
-
[解決済み] アルゴリズムと関数の違いは何ですか?[クローズド]
-
[解決済み] 与えられた数列の中に現れない最小の正の整数を求めよ。