これは、見つけたアルゴリズムが問題の例をどのように処理するかについての説明です。
問題は、途中の累積コストがを超えてはならないという追加の条件を使用して、とのnode one
間の最短経路を見つけることです。node four
7
私たちが見つけたい解決策は、最初node one
にノードに移動することです。node two
距離は。です。そして、距離とコストのパスを使用するようになります。合計すると、パスの距離とコストは。になります。190
4
node two
node four
195
3
385
7
ステップ1
では、アルゴリズムはこれをどのように見つけますか?minArray(i,j)
最初のステップは、これまでと同じようにマトリックスを設定することです。配列の要素は、正確にお金が残っている状態で(i,j)
ノードに到達するために移動する必要がある距離を保持します。j
i
node one
最初は訪問された要素はなく、 「お金」から始めているので、7
左上の要素はゼロに設定されています。上記の表の空のスペースはinfinity
、配列で設定されている値に対応しています。
ステップ2
次に、配列の最小値を見つけます。これは、位置のゼロ(remaining money, node) = (7,1)
です。この要素はに設定されますvisited
(要素の状態はvisitedArray
と同じサイズの行列を使用して追跡されますminArray
)。これは、を選択したことを意味しnode one
ます。これで、接続するすべてのノードがnode one
、対応するエッジをトラバースすることによって値で更新されます。
これは、私たちが到達するためにminArray(6,3) = 191
距離を置いたことを意味し、私たちが残したお金は、そこに到達するためのコストを支払ったためです。同様に、に設定されます。赤い四角は、その要素が訪問されたことを示します。191
node three
6
1
minArray(3,2)
190
(7,1)
ステップ3
ここで、訪問されていない最も低い要素(であるminArray(3,2) = 190
)を再度見つけ、それに設定して、それにvisited
接続するすべての要素を更新します。これは、距離が累積され、現在の値からコストを差し引いて残りの金額が計算されることを意味します。
node one
から戻るにはコストがかかりすぎることに注意してくださいnode two
。
ステップ4
次のステップ、選択minArray(6,3) = 191
は次のようになります。
ステップ5
3ステップ後、配列は次のようになります。ここでは、等しい2つの要素と等しい382
1つの要素383
が選択されています。要素の値は、それが現在の値の改善である(つまり、より低い)場合にのみ更新されることに注意してください。
ステップ6
配列は、すべての要素が訪問されるか、無限の値を持つまでいっぱいになり続けます。
最終段階
最後のステップは、列4の最小値を見つけることによって合計距離を見つけることです。minArray(0,4) = 385
最小値が正しい解に対応していることがわかります。
注:列4のすべての値が無限大である場合、有効な解決策がないことを意味します。アルゴリズムは、列4に等しく最小の距離の値が複数ある場合、最も安価な値が選択されることも指定します。