Floyd-Warshallアルゴリズム
1703 ワード
目次
1.floydwalshアルゴリズムとは?
前述した最短距離アルゴリズムは,開始点を決定しなければならない.
flowersalアルゴリズムは開始点を設定しません.
flowersalアルゴリズムは、すべての頂点間の最短距離を求めるために使用されます.
2.アルゴリズム使用例
上の図を例に挙げましょう.
int n = v.size();
for (int k = 1; k <= n; k++)
for (int i = 1; i <= n; i++)
for (int j = 1; j<= n; j++)
if (D[i][j] > D[i][k] + D[k][j])
D[i][j] = D[i][k] + D[k][j]
以上のコードはfloywalshアルゴリズムを説明した.次の表を作成して、わかりやすいようにします.
テーブルに表示される行列をD[i][j]と呼ぶ場合、その値は頂点iからjまでの値となる.
D[1][2]の場合、INFは無限であり、頂点1は頂点2と直接関係しないため、INFとして保存される.
kの値を増やしましょう.
kが1の場合、頂点1を通過した最大値が格納されます.
表示される部分が変更されました.
D[2][1]+D[1][3]は既存値D[2][3]よりも値が小さいため、D[2][1]+D[1][3]はD[2][3]の値を修正する.
この手順を繰り返します.頂点ごとに数万ドルです.
後の行列Dは、全ての頂点の最短距離を記憶する.
3.不可能な例
表示されている頂点をチェックすると
1.循環を形成する.
2.形成されたループウェイトの和は負数である.
と確認できます.
この場合、ループが無限である場合、重みの和は無限に小さくなり、最大値は見つかりません.
4.時間の複雑さ
前述のコードを表示できます.
表示するグラフィック頂点をVと呼ぶ場合、時間の複雑さはO(V^3)です.
前述した他のアルゴリズムについてedgeは時間的複雑さに関係する.
従って,エッジの多いグラフィックではflowersalアルゴリズムの動作が見られる.
統合
1.複数の頂点の最短距離を探す必要があります.
2.図のエッジが多数存在します.
この場合、流水アルゴリズムを使用できます.
Reference
この問題について(Floyd-Warshallアルゴリズム), 我々は、より多くの情報をここで見つけました https://velog.io/@jjj7061/플로이드-워셜-알고리즘Floyd-Warshall-Algorithmテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol