Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

Javascriptの最短経路アルゴリズム


グラフ理論では、最短経路問題は、構成するエッジの重みの合計が最小になるように、グラフ内の2つの頂点(またはノード)間のパスを見つける問題です。ここでは、エッジの追加と有向メソッドの追加を変更して、エッジにも重みを追加できるようにする必要があります。

これを追加する方法を見てみましょう-

/**
   * Adds 2 edges with the same weight in either direction
   *
   *             weight
   * node1 <================> node2
   *             weight
   *
*/
addEdge(node1, node2, weight = 1) {
   this.edges[node1].push({ node: node2, weight: weight });
   this.edges[node2].push({ node: node1, weight: weight });
}

/**
   *  Add the following edge:
   *
   *             weight
   * node1 ----------------> node2
   *
*/

addDirectedEdge(node1, node2, weight = 1) {
   this.edges[node1].push({ node: node2, weight: weight });
}

display() {
   let graph = "";
   this.nodes.forEach(node => {
      graph += node + "->" + this.edges[node].map(n => n.node) .join(", ")+ "\n";
   });
   console.log(graph);
}

これで、グラフにエッジを追加するときに、重みを指定しない場合、デフォルトの重み1がそのエッジに割り当てられます。これを使用して、最短経路アルゴリズムを実装できるようになりました。


  1. 0-1 CプログラムのBFS(バイナリウェイトグラフの最短経路)?

    いくつかのノードと接続されたエッジを持つグラフがあるとします。各エッジには2進の重みがあります。したがって、重みは0または1になります。ソース頂点が指定されます。ソースから他の頂点への最短経路を見つける必要があります。グラフが以下のようになっていると仮定します- 通常のBFSアルゴリズムでは、すべてのエッジの重みは同じです。ここでは、いくつかは0で、いくつかは1です。各ステップで、最適な距離条件を確認します。ここでは、両端キューを使用してノードを格納します。そこで、エッジの重みを確認します。 0の場合は前に押し、そうでない場合は後ろに押します。より良いアイデアを得るためにアルゴリズムを

  2. フラッディングと固定ルーティングアルゴリズム

    フラッディングと固定ルーティングは、伝送線路で接続された多数の中間ルーターを介して、送信元から宛先にデータパケットを送信する方法です。 洪水 は、この単純な方法に従った非適応型ルーティング手法です。データパケットがルーターに到着すると、到着したリンクを除くすべての発信リンクに送信されます。 固定ルーティングアルゴリズム は、送信元から宛先にデータパケットを転送するための固定ルートまたはパスを設定する手順です。ルートは、数学的に計算された最適なパス、つまり、パケットをルーティングできる「最小コストのパス」です。ルートはルーティングテーブルに保存され、ネットワークのトポロジが変更された場合にの