私は動的なプログラミング演習をしていて、Floyd-Warshallアルゴリズムを見つけました。どうやら、負の重みのエッジを持つことができますが、負のサイクルがないグラフのすべてのペアの最短パスを見つけます。
だから、負の重みのエッジの現実世界の重要性は何だろうか?わかりやすい英語の説明が役立つでしょう。
私は動的なプログラミング演習をしていて、Floyd-Warshallアルゴリズムを見つけました。どうやら、負の重みのエッジを持つことができますが、負のサイクルがないグラフのすべてのペアの最短パスを見つけます。
だから、負の重みのエッジの現実世界の重要性は何だろうか?わかりやすい英語の説明が役立つでしょう。
回答:
Saeed Amiriはすでにコメントで優れた例を示しています。エッジの重みは、実世界のあらゆるもの、たとえば、あるアカウントから別のアカウントに送金される金額を表すことができます。金額は正でも負でもかまいません。たとえば、グラフのaからbに移動してできるだけ少ないお金(最短パス)を失いたい場合、負の重みを考慮することができます。詳細については、この本の章を参照してください。
それとは別に、さらに多くのアプリケーションがあります。負の重みは、モデルの種類によって異なります。たとえば、このグラフを考えます
化学:重量は、化学反応中に発生する熱を表すために使用できます。(モード:の化合物は、エッジがの化合物場合:Vは、から)(「化学的に還元」を得ることができるUこのグラフでは:あなたが生じる。4変換するkJのをS -及び2変換するkJのにTあなたが必要。5 tからsを取得するkJ 。
実生活:雇用主をからtに運転するために給料をもらっているが、aとbの間で支払うドライバーを考えてみてください(家と職場の間を旅行するなど)。
ゲーム:お金のためにじゃんけんをするとします。ノード:じゃんけん。エッジ:任意の関係(クリーク)。ウェイト:賭け。このグラフでは:(忘れ)、ここで、sはビート、ビートT及びTビートS、及び、4,2を獲得-5それぞれ。
負のエッジは、単に負の重みを持つエッジです。グラフとそのエッジが参照しているものに関係するあらゆるコンテキストにある可能性があります。たとえば、上のグラフのエッジCDは負のエッジです。Floyd-Warshallは、可能であればグラフのすべてのペア間の重みを最小化することで機能します。したがって、負の重みについては、正の重みエッジに対して行うのと同じように、単純に計算を実行できます。
問題は負のサイクルがある場合に発生します。上記のグラフをご覧ください。そして、質問を自問してください-AとEの間の最短経路は何ですか?最初はABCEのコストが6(2 + 1 + 3)のように感じるかもしれません。しかし、実際には、さらに詳しく見ると、負のサイクル、つまりBCDが観察されます。BCDの重みは1 +(-4)+2 =(-1)です。AからEに移動する間、BCD内をサイクリングし続けることで、毎回1つずつコストを削減できます。同様に、パスA(BCD)BCEのコストは5(2 +(-1)+ 1 + 3)です。サイクルを無限に繰り返すと、毎回1つずつコストが削減されます。AとEの間の負の無限最短経路を達成できました。
この問題は、グラフ内の負のサイクルで明らかです。したがって、負のサイクルが存在する場合は常に、最小重みが定義されていないか、負の無限大であるため、そのような場合、Floyd-Warshallは機能しません。
さらに、グラフに負のサイクルがあるかどうかを検出し、それ以外の場合は2つのノード間の最短パスを返すBellman-Fordアルゴリズムを調べてください。
たとえば、エッジijの重みw(i、j)が頂点iから頂点jに行くコストであるロジスティックネットワークを想像してください。製品を輸送するために他の会社とビジネス契約を結んだ場合、w(i、j)はコストではなく利益になるため、この重量を負のコストとして解釈できます。
地図上の渋滞:
重みをエッジに関連付けるもう1つの実世界の例は、重みがマップ内の交通状況を表す(より否定的で、好ましくない)場合です。この表現を使用して、最適な距離を計算できます。
「重み」の比betweenを実際に使用して、グラフの任意の2点間の正/負の値を表すことができます。