JavascriptのFloyd-Warshallアルゴリズム
Djikstraのアルゴリズムは、1つのノードから他のすべてのノードまでの最短経路の距離/経路を見つけるために使用されます。すべてのノードから他のすべてのノードへの最短パスを見つける必要がある場合があります。ここで、すべてのペアの最短経路アルゴリズムが役立ちます。最も使用されているすべてのペアの最短経路アルゴリズムは、FloydWarshallアルゴリズムです。
フロイドウォーシャルアルゴリズムは次のように機能します-
- 距離のNxN行列をInfinityに初期化します。
- 次に、各エッジu、vについて、この行列を更新してこのエッジの重みを表示し、エッジv、vについては、重みを0に更新します。
- イテレータI、j、kを使用して3つのネストされたループを作成します。すべてのノードIからすべてのノードjまでの距離について、kを中間点として使用することを検討し、既存のarr[i][j]よりも小さい距離が見つかった場合は距離を更新します。
複雑なオブジェクトを使用して各ノードを表す場合に備えて、インデックスを追跡する必要がないため、マトリックスを使用する代わりに、オブジェクトを使用します。
次に、同じ-
の実装を見てみましょう。例
floydWarshallAlgorithm() { let dist = {}; for (let i = 0; i < this.nodes.length; i++) { dist[this.nodes[i]] = {}; // For existing edges assign the dist to be same as weight this.edges[this.nodes[i]].forEach(e => (dist[this.nodes[i]][e.node] = e.weight)); this.nodes.forEach(n => { // For all other nodes assign it to infinity if (dist[this.nodes[i]][n] == undefined) dist[this.nodes[i]][n] = Infinity; // For self edge assign dist to be 0 if (this.nodes[i] === n) dist[this.nodes[i]][n] = 0; }); } this.nodes.forEach(i => { this.nodes.forEach(j => { this.nodes.forEach(k => { // Check if going from i to k then from k to j is better // than directly going from i to j. If yes then update // i to j value to the new value if (dist[i][k] + dist[k][j] < dist[i][j]) dist[i][j] = dist[i][k] + dist[k][j]; }); }); }); return dist; } }
-
を使用してこれをテストできます例
let g = new Graph(); g.addNode("A"); g.addNode("B"); g.addNode("C"); g.addNode("D"); g.addEdge("A", "C", 100); g.addEdge("A", "B", 3); g.addEdge("A", "D", 4); g.addEdge("D", "C", 3); console.log(g.floydWarshallAlgorithm());
出力
これにより、出力が得られます-
{ A: { C: 7, B: 3, D: 4, A: 0 }, B: { A: 3, B: 0, C: 10, D: 7 }, C: { A: 7, D: 3, B: 10, C: 0 }, D: { A: 4, C: 3, B: 7, D: 0 } }
-
JavaScriptのデバッガーステートメント
JavaScriptのデバッガーステートメントは、コードにブレークポイントを設定するために使用されます。コードは、デバッガーステートメントに遭遇するとすぐに実行を停止し、デバッガー関数(使用可能な場合)を呼び出します。 以下は、JavaScriptでデバッガステートメントを実装するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" co
-
JavaScriptのimage()オブジェクト。
画像オブジェクトはHTML要素を表します。 以下はJavaScriptの画像オブジェクトのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> &