記事の内容の概要
ダイクストラアルゴリズム
- ダイクストラアルゴリズムは有名なグラフ理論アルゴリズムです
- ダイクストラアルゴリズムは、あるノードから他のノードへの重み付きグラフの最短経路問題を解決します
- 特徴:「出発点を中心に、外層へと拡大」
最短経路問題
次の図のようなネットワークがあるとします。ネットワークには複数のノードA、B、C、D、E、Fといくつかのエッジがあり、各エッジには対応する距離があります。この時点でAからEへの最短経路が必要であると仮定します
以下にリストされているのは、AからEまでのすべての可能なパスとパスの長さです。
A->B->C->E = 13
A->C->E = 11
A->D->C->E =13
A->D->E = 9
A->F->E = 10
リストされた結果から、最短経路はA-> D-> Eであり、距離は9です。これは人為的に検索されますが、最短経路問題を解決するためにプログラミング言語に変換する必要があります
最初にアルゴリズムのプロセス全体をテキストで紹介し、次に例を通して各プロセスを説明します
ダイクストラアルゴリズム
ダイクストラアルゴリズムプロセスの説明
- 2つのセット(S、U)を初期化します(Sは最初の頂点Aのみのセットであり、Uは他の頂点のセットです)
- Uが空でない場合は、設定されたUの頂点を距離で並べ替え、Aに最も近い頂点Dを取得します。
-
将顶点D放入S集合
-
更新通过顶点D到达U集合所有点的距离(如果距离更小则更新,否则不更新)
-
重复步骤2
- Uセットが空になるまで、アルゴリズムプロセス全体が完了します
以下の例を通して、上記のプロセスを理解してください
AからEまでの最短距離が必要なため、Aは最初にSセットに含まれ、AからAまでの距離は0です。次に、他の頂点UのセットはB、C、D、E、Fであり、図からわかるように、Aからこれらの頂点までの距離を計算します。
セットUは空ではないので、AからセットUの各頂点までの距離を並べ替え、Aまでの距離が最も短い頂点を見つけて、セットSに入れます。図から、Aから頂点Bまでの距離が最も小さいことがわかるので、集合Sに入れます。
次に、次のように計算する必要があります。AからBを通る残りの各頂点までの距離
BからCまでの距離は5であることがわかっているため、AからCまでの距離は次のようになります。A-> B-> C = 6 + 5 = 11、セットUのAからCまでの元の距離は9、9 <11、したがって、セットUに更新する必要はなく、次の結果が得られます。
次に、Uを判断し、空ではないことを確認します。したがって、AからUの各頂点までの距離を並べ替えて、AからFまでの距離が最短であることを確認します。このとき、FをSセットに入れます。次に、この時点で各頂点に到達するためのAとFの間の距離を計算します。AからE、Fまでの距離は10であることがわかります。このとき、AからUの頂点Eまでの距離が更新され(この距離は元々不明です)、次の結果が得られます。
次に、上記の手順を繰り返して、Uの最短距離がDであることを確認し、DをセットSに入れて、Dを介して各頂点までのAの距離を計算し、AからDを介してCまでの距離が11であることを確認します。 、およびAからDまでの距離は9です。このとき、AからCを経由してDまでの距離は、UのAからCまでの距離よりも大きいため、UのAからCまでの距離は置き換えられません。次に、AからEを介してDまでの距離が9であることがわかります。これは、UのAからEまでの距離が10より小さいため、UのAからEの値を置き換えると、次の結果が得られます。
次に、セットUに2つの要素が残っています(2つの距離値は同じです。1つを選択してセットSに入れます)。次に、セットUが空になるまで上記の手順を繰り返します。最終結果は次のとおりです
得られたSセットの距離は、Aから各頂点までの最短距離です。上記は、ダイクストラのアルゴリズムのプロセス全体です。興味がある場合は、Bを各頂点までの最短距離にプッシュすることもできます
急速に変化するテクノロジーの常識を見つけることは、技術者のコアコンピタンスです。理論と実践を組み合わせた知識と行動の統一