ネットワーク内で最長の最短パスを見つけるための最適なアルゴリズムはありますか?


13

線形ネットワークの大規模なセットがあり、ネットワークに沿って互いに最も離れている各ネットワークの両端を見つけたいと思います(下の画像では、DからKです)。この問題に対するブルートフォースソリューションは、発信元の各ペアのネットワークに沿った最短パスを計算することですが、数千のエンドを持つ数百のネットワークがあるため、可能な各パスの計算は非常に重いです。

総当たりを使用せずにこれを計算する最適な方法はありますか?いくつかの巧妙なルールに基づいていくつかのポイントを除外できますか?

赤い道を効率的に見つける方法は?

編集:私の質問を明確にするために、@ Alex Tereshenkovが言及した最長パスの図を追加しました。黒いパスは、最長パスアルゴリズム(頂点を繰り返さない最長パス)の結果です。私の場合、あなたはいずれかの文字からネットワークに入り、できるだけ早く別の文字に運転する必要があると想像してください。参加するのに最も難しいのはどの2文字ですか? ここに画像の説明を入力してください


マッドペイントスキルズ!
アダム

回答:


6

ネットワークのグラフ直径を探しているのではないかと思います。stackexchangeには、このトピックに言及するいくつかの質問があります。例えば:

ほとんどのアルゴリズムは、最初に「すべてのペアの最短パス」を計算し、それらのうち最も長いものを選択することを推奨していますが、Koushik Narayananによるブログ記事を見つけました。各頂点を反復処理して、最も遠いペアを見つけます。

V1と頂点の1つとの間の最短パスであり、他の頂点間の最短パスよりも長くなるように、頂点V1からのパスを計算できます。アルゴリズムについては、この投稿を参照してください。次に、すべての頂点を反復処理し、すべての頂点をルートとする最長パスを見つけることができます。すべての最長最短パスのリストを取得したら、最大値を持つものを見つけてそれを返すことができます。


おかげで、グラフの直径はまさに私が探しているものであり、私の場合は疑似直径ヒューリスティックが機能します。私はそこで新しい言葉を学びました!
radouxju

7

ウィキペディアのページの最長経路問題によると、この問題

...はNP困難です。つまり、 P = NPでない限り、任意のグラフの多項式時間解くことができません。より強い硬度の結果も知られており、近似することが困難であることを示しています。ただし、非循環有向グラフには線形時間ソリューションがあり、スケジューリング問題のクリティカルパスを見つける際に重要な用途があります。

作業する(またはグラフをDAGとして表すことができる)場合、networkxPythonパッケージで計算できます。関数を探しますdag_longest_path

何かが足りない場合を除き、グラフノード間の長さを計算して並べ替える必要がありますが、残念ながら線形時間でのみ動作します。つまり、効率的なアルゴリズムはありません。


答えを求めて、すでに情報のため+1。ただし、ネットワーク内で最も短い最短経路を探しています(この例では、BまたはHへの迂回はありません)。したがって、「ブルートフォース」がおそらく唯一の解決策であることを示唆していても、あなたの解決策は私が探しているものとはまったく異なります。
-radouxju

@radouxju、ああ、なるほど。さて、遺伝子がこれに気づくかどうかを見てみましょう、彼はグラフで多くの経験があり、おそらく彼はいくつかの明るいアイデアを持っています。
アレックステレシェンコフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.