この記事では、まず単一ソース最短経路問題から始め、次にベルマン・フォード アルゴリズムについて説明し、最後にダイクストラアルゴリズムについて具体的に説明します。ダイクストラ アルゴリズムの各ステップを詳細に説明および分析し、このダイクストラ アルゴリズムを徹底的に理解できるようにします。 1. 単一ソース最短経路問題 単一ソースの最短経路問題とは、グラフ G=(V, E) が与えられたときに、固定ソース頂点 s<-V から各 v<-V までの最短経路を見つけることが求められる問題です。簡単に言えば、グラフ G 内の固定点 s を見つけ、次に s を開始点として使用して、s からグラフ G 内の残りの点までの最短距離または経路を見つけることです。 この単一ソースの最短経路問題には、次のバリエーションがあります。 I. 単一目的地最短経路問題: 各頂点 v から指定された目的地 t までの最短経路問題。つまり、単一ソース最短経路問題の相対的な問題です。 II. 単一の頂点ペアの最短経路問題: 頂点 u と v が与えられた場合、u から v への最短経路を見つけます。 III. 各頂点間の最短経路問題: 任意の 2 つの頂点 u と v について、u から v への最短経路を見つけます。最も単純なアイデアは、各頂点をソース ポイントとして扱い、単一ソース アルゴリズムを 1 回実行することでこの問題を解決することです。もちろん、もっと良い方法があります。 2. ベルマンフォードアルゴリズム 1. 回路の問題 最短パスには、負の重み付けされたループまたは正の重み付けされたループを含めることはできません。ダイクストラのアルゴリズムなどの一部の最短経路アルゴリズムでは、グラフ内のすべてのエッジの重みが非負である必要があります。たとえば、道路地図では、固定点 s から目的の頂点 v までの最短経路を見つける問題が解決されます。 2. ベルマンフォードアルゴリズム Bellman-Ford アルゴリズムでは、ソース ポイントから到達可能な負の重みのループがない限り、入力グラフに負の重みのエッジが存在することが許可されます。簡単に言えば、グラフには負の重みのエッジが存在する可能性がありますが、これらの負の重みのエッジは負の重みのループを構成せず、ループの形成に影響を与えません。さらに、ベルマンフォード アルゴリズム自体は、グラフ内のソース ポイントから到達可能な負の重みループがあるかどうかを判断できます。負の重みループがある場合、アルゴリズムは FALSE を返し、ない場合は TRUE を返します。 ベルマンフォードアルゴリズムの詳細な説明 ベルマンフォード(G、w、s)
上記から、ベルマンフォードアルゴリズムの時間計算量は O(V*E) であることがわかります。 3. グラフに負の重みループが含まれているかどうかという質問に関して: 定理によれば、uはvの親であると仮定する。すると、G(V,E)が有向グラフまたは無向グラフ(負の重みループを含まない)の場合、s<-V、sはGの任意の頂点であり、任意の辺(u、v)<-Vに対して、 d[s,v] <= d[s,u]+1 である。 この定理の詳細な証明については、『アルゴリズム入門』の第 22 章の補題 22.1 の証明を参照してください。あるいは、第 24 章の三角不等式を使用したベルマン-フォードアルゴリズムの正しさの証明に基づいて、上記の定理のバリエーションを導き出すこともできます。 つまり、グラフGに負の重みループが含まれていないと仮定すると、次のことが証明できる。
したがって、負の重みサイクルを含まないグラフでは、d[v]<=d[u]+w(u,v) と結論付けることができます。 したがって、上記のベルマンフォードアルゴリズムでは、d[v] > d[u]+w(u,v)の場合、=> 負の重みループが含まれ、FASLEが返されることは理解しにくいことではありません。 そうでない場合、=> に負の重みループが含まれていない場合は、TRUE を返します。 さて、ダイクストラアルゴリズムに移りましょう。 3. ダイクストラアルゴリズムをわかりやすく説明し、徹底的に分析する I. リラクゼーションテクニックの紹介 RELAX ダイクストラアルゴリズムは緩和技術を使用します。各頂点 v<-V に対して、ソースポイント s から v までの最短パスの重みの上限を記述する属性 d[v] が設定されます。 まず、最短経路を推定し、先行ノードを初期化するのに O(V) の時間がかかります。
II. ダイクストラアルゴリズム このダイクストラ アルゴリズムには、INSERT (行 3)、EXTRACT-MIN (行 5)、および DECREASE-KEY (行 8 の RELAX、この減分キー操作を呼び出す) の 3 つのステップがあります。
4. ダイクストラアルゴリズムの実行時間 先に進む前に、問題を述べなければなりません。DIJKSTRA (G, w, s) アルゴリズムの 5 行目、EXTRACT-MIN (Q) は、最小優先度キューの具体的な実装です。ダイクストラ アルゴリズムの実行時間は、この最小優先度キューの特定の実装によって異なります。 最小優先度キューの 3 つの実装方法: 1. 1 から |V| まで番号が付けられた頂点を使用して、各 d[v] を、上記の DIJKSTRA(G, w, s) に示すように、配列内の対応する v 番目の項目に格納します。ダイクストラのアルゴリズムの実行時間は O(V^2+E) です。 2. 最小優先度キューがバイナリ/アイテムヒープによって実装されている場合、EXTRACT-MIN(Q) の実行時間は O(V*lgV) なので、ダイクストラのアルゴリズムの実行時間は O(V*lgV+E*lgV) です。すべての頂点がソースポイントから到達可能な場合、O((V+E)*lgV)=O(E*lgV) です。疎グラフの場合、E=O(V^2/lgV)となり、このダイクストラアルゴリズムの実行時間はO(V^2)となります。 3. フィボナッチヒープを使用して最小優先度キューを実装する場合、EXTRACT-MIN(Q) の実行時間は O(V*lgV) なので、このダイクストラアルゴリズムの実行時間は O(V*lgV+E) になります。 要約すると、この最小優先度キューの 3 つの実装方法は次のように比較されます。 |V|<<|E|の場合、DIJKSTRA(G, w, s) + FIB-HEAP-EXTRACT-MIN(Q)、つまりフィボナッチヒープを使用して最小優先度キューを実装します。 5. ダイクストラアルゴリズム + FIB-HEAP-EXTRACT-MIN(H)、最小優先度キューを実装するためのフィボナッチヒープ 上記から、フィボナッチ ヒープを使用して最小優先度キューを実装すると、実行時間が O (VlgV + E) に改善されることがすでにわかっています。 |V| EXTRACT-MIN操作(それぞれ償却コストO(lgV))、および|E| DECREASE-KEY操作(それぞれ償却時間O(1))。 次に、DIJKSTRA(G, w, s) におけるフィボナッチヒープを用いた最小優先度キューの実装操作に焦点を当てます。 上記から、DIJKSTRA アルゴリズムには次の 3 つのステップが含まれていることがすでにわかっています。 INSERT (行 3)、EXTRACT-MIN (行 5)、および DECREASE-KEY (行 8 の RELAX)。 まず、ダイクストラアルゴリズム + FIB-HEAP-EXTRACT-MIN(H) のアルゴリズムを直接示します。
6. ダイクストラ法+フィボナッチヒープの各ステップの詳細な分析 さて、次に、上記の操作を段階的に詳しく説明します。 行3のINSERT操作:
5行目のEXTRACT-MIN演算:
次の図は、FIB-HEAP-EXTRACT-MIN プロセスの概略図です。
8行目のRELAXの操作は上記に示されています。
一般的に、ダイクストラのアルゴリズムでは、DECREASE-KEY は EXTRACT-MIN よりもはるかに頻繁に呼び出されます。 以下は、バイナリ ヒープ、二項式ヒープ、フィボナッチ ヒープのさまざまな操作の時間計算量の比較です。 操作 バイナリヒープ(最悪の場合) 二項式ヒープ(最悪の場合) フィボナッチヒープ(償却) ヒープを作る Θ(1) Θ(1) Θ(1) フィボナッチ ヒープについては、今後このブログでさらに詳しく調査し、詳しく説明する予定です。同時に、この記事は今後も深化と拡張を続けていきます。 オリジナルリンク: http://blog.csdn.net/v_JULY_v/archive/2011/02/13/6182419.aspx 【編集者のおすすめ】
|
<<: Googleが4月22日に発表したアルゴリズム改善策の分析
ディープラーニング、機械学習、人工知能 — これらの流行語は分析の未来を表しています。この記事では、...
[[423968]] Leetcode を実践するには、いくつかのアルゴリズム テンプレートを知って...
人類はアフリカでホモ・サピエンスとして誕生して以来、約50万年にわたる進化の過程を経てきました。人類...
8月29日、2019年世界人工知能会議が上海で開幕した。世界各国の著名なテクノロジー企業や学界、産業...
MicrosoftとGoogleはAI市場の支配を競っており、両社ともAIハードウェアに多額の投資を...
[51CTO.com からのオリジナル記事] 自動車業界における人工知能の応用を考えるとき、最初に思...
人類は、自分たちの仕事を担ってくれる全知全能のエルフを持つことを常に夢見てきました。現在、研究室のコ...
ロボット産業は創業以来、大幅な収益成長を遂げてきました。 2023年までに、世界のロボット市場は年間...
人工知能は、人間による情報の統合、データの分析、機械の助けを借りた洞察の獲得のプロセスを再構築し、人...
「今日のテクノロジーの世界では、クラウドにおける AI とエッジにおける AI の統合が重要です」と...
ロボット歯科医はすでに存在するのでしょうか?まだ……。しかし、歯科医院では、日常的なケアに新しい技術...
コンピュータサイエンスとエレクトロニクスの急速な発展により、顔認証は現在、指紋に次いで世界第2位の市...