ジョブ2ダイクストラの最短経路アルゴリズムとフロイドのアルゴリズムアルゴリズム

1.問題

負G、頂点集合Vは、m個の頂点にダイクストラ最短パスアルゴリズムG n個の頂点を用いて決定していない、図の特定の円与えられ、最短経路は、特に図は、以下のフロイドのアルゴリズム複数のソースを使用して決定されます

2.解析

ダイクストラ法は、単一始点最短経路アルゴリズム、すなわちaは、mが他のすべての頂点への最短経路を決定される点m開始与えられます。DIST | | == | V |主な考え方は、配列DISTとSを維持することで、Sはすべての最短パスが点がDISTのためのものであることが決定されている含まれ、任意DISTため[N-]、mは、出発点を表します決定された最短経路の頂点Sを通ります。アルゴリズムの主な流れは以下のとおりです。

1.選択さDISTは、頂点Iの頂点の最小値で決定されていない、iがSに追加されます

頂点iはdistの値を更新、追加しました

12時まで3.を繰り返して、資格のある頂点を見つけることができません

 

フロイドのアルゴリズムは、V mに属する任意の時点で得られるマルチソース最短パスアルゴリズムであり、他のすべての頂点への最短経路をmです。主なアイデアは、mは点までの最短距離まで通っ点からN点を表し、Dは、オプションD [M] [N]に、二次元アレイPとDを維持することです。Pは任意P [M] [N]であるため、点Nの経過にポイントmからの最短距離を表しています。任意の2点のためにM、N、それはそのようなD [M] [K] + D [k]を[N] <D [M] [n]は、上記の条件が満たされた場合、次にDことは、点kが存在してもよいですポイントのカレンダーの存在によって、何度も何度も更新され、あなたは、任意の2点間の最短経路の距離を取得することができます。それは、この経路P、特定のルートに格納されています。一例として、上記の図は、図の隣接行列から開始示し、Dは、(任意の点なし)mに対するnからの距離を表し、Pは点そこを通して最短距離を表します。

 

最初のパスの後、最初のチェックポイントのために、Mがあるか否かを判定し、N、D [m]は、[1] + D [1]〜[N] <D [M] [n]は、最初にそのような次のように図の更新します:

第2の更新後の第二の点を追加しました。

 

 

 

更新後の第3:

 

 

 

第四の更新後、すべての点間の最短経路です。

 

あなたがパスを検索したい場合は、この行列に応じて再帰Pのために見に行くことができます。

3.デザイン

[コア擬似]

 

ダイクストラ:

一方、(1){

       V =最小点の点DISTを見つけるために決定されていません

       If(找不到V)

              Break

              确定V

       For(V的所有邻接点V1)

       {

              If(V1未确定)

                     Dist[V1] = min(dist[V]+<V,V1> , dist[V1])

       }

}           

 

Floyd:

D = G的邻接矩阵

For(k = 1;k <= G.vertex ;k++)

       For(i = 1;I <= G.vertex;i++)

              For(j = 1;j <= G.vertex;j++)

                     If(D[i][k]+D[k][j]<D[i][j])

                     {

                            D[i][j] = D[i][k]+D[k][j];

                            P[i][j] = k;

                     }

4.     分析

Dijkstra算法的时间复杂度,首先对于最外面的while循环,这个循环会执行|V|次,对于循环内部去遍历邻接点的操作,最多会执行|V|次,因此整个算法的时间复杂度是O(|V|2)

Floyd算法的时间复杂度是O(|V|3),因为主要内容就是三个循环,每个循环都进行了|V|次

针对于Dijkstra算法还是比较好理解的,因为只是单源最短路径,只要维护一个数组就可以了,对于其中的贪心算法的思想也可以理解。但是对于Floyd算法其中的动态规划的思想还是没有理解的很透彻。

5.     源码

https://github.com/fanchile/Algorithm

おすすめ

転載: www.cnblogs.com/Fanchile/p/12409460.html