注:無向グラフに関する同様の質問を投稿しました。
与えられた
- 複数辺やループのない有向グラフ
- ソースノード
- ターゲットノード
- 最大経路長
私が探していますのサブグラフ-任意のノードと任意のエッジ含まから少なくとも一つの単純なパスの一部である(とのみ)、を長さ。
パスを列挙する必要がないことに注意してください。
注:無向グラフに関する同様の質問を投稿しました。
与えられた
私が探していますのサブグラフ-任意のノードと任意のエッジ含まから少なくとも一つの単純なパスの一部である(とのみ)、を長さ。
パスを列挙する必要がないことに注意してください。
回答:
質問が述べられているように、入力の一部としてがある場合、問題はN P -hardです。これは、Fortune、Hopcroft、およびWyllieの論文による有向部分グラフ同型写像問題がN P -complete であるパターンのクラスの分類の特殊なケースとして続きます:有向部分グラフ同相写像問題。
特に、次の問題は完全です。有向グラフGと頂点s 、t 、vが与えられた場合、vを通る(単純な)(s 、t ) -path は存在しますか?
更新:この回答には欠陥があるようです。Kristoffer Arnsfelt Hansenからのコメントを参照してください。
私はあなたの問題を解決する方法を知っているが、ここではあなたの問題の簡単なバージョンを解決するための技術ですしていない。すなわち、エッジ与えられたからの任意の単純なパスが存在するかどうか、テストSにトンエッジ含まれる電子を。(これは、l = ∞の問題の特殊なケースに対応します。)
サブルーチンとして「下限のあるmax-flow」を使用して、この簡単な問題を解決できます。標準のmax-flow問題では、各エッジの容量により、そのエッジを通過するフローの量に上限が与えられます。エッジのフローの量は0で下限する必要があります。 "max-flow下限付き」の場合、そのエッジを通過する流れの量の下限と上限の両方を指定できます。「下限のある最大フロー」は多項式時間で解けることが知られています。
今、私たちはエッジがあると、私たちはより簡単なパスが存在するかどうかをテストするのにトンエッジ含まれる電子を。下限問題のあるmax-flowを設定します。特に、グラフGを取り、エッジs 0 → s の新しいノードs 0とエッジt → t 1の新しいノードt 1を追加します。各エッジ1の容量(上限)を作成します。エッジeの下限を除き、すべてのエッジの下限は0になります。次に、すべての範囲を満たすからtへの実行可能なフローが存在するかどうかを確認します(このテストは、前述のように多項式時間で実行できます)。フローがない場合、sからtへの単純なパスはありません。そのようなフローがある場合、そのフローをトレースすると、エッジeを含むsからtへの単純なパスが生成されるため、そのような単純なパスが存在します。
「下限のある最大フロー」問題を解決するにはどうすればよいですか?この場合、1つのエッジのみにゼロ以外の下限があります。したがって、ネットワークフローへの標準的なアプローチを使用できます。ここで、各ポイントで、残差グラフの最短パスを計算することによって拡張パスを選択します。ただし、ここでは(大まかに)拡張パスの1つにエッジ含まれていることを確認します。
私は次の論文からこの考えを学びました:
(公開されたバージョンではなく、必ずtechreportバージョンをお読みください。このアイデアは、導入部の2番目の段落にあります。)
残念ながら、元の問題を解決するためにこの手法を拡張する方法はわかりません。上限は単純なパスの長さです。
または、整数線形計画法(ILP)を使用して簡単な方法で問題を解決することもできます。実際には、ILPソルバーは多くの問題に対してかなり優れています。ただし、最悪の場合の実行時間は依然として指数関数であるため、多項式の最悪の場合の実行時間を持つアルゴリズムは提供されません。ILPを使用してこれを作成する方法について詳しく説明してほしい場合は、お知らせください。
2つの幅優先探索と、時間O (V + E )におけるノードとエッジのスキャンを使用して、サブグラフを計算できます。
我々は、から幅優先探索実行でGを取得するBFSナンバリングD S(V )各ノードのためのVにおけるG。BFS番号は、sからvへの最短経路のエッジの数を示します。我々はまた、から幅優先探索実行tでの転置でG(エッジたグラフである(V 、U )各辺の(Uは、V )におけるG)番号BFS得るためのD Tを(各ノードのための Vにおける G。
各ノードのための Gは、から最短の単純な経路SにTを通過vが長有するDをS(V )+ dはT(V )。
部分グラフノード含まVからGの場合に限り、D S(V )+ dはT(V )≤ Lとエッジ(U 、V )の場合に限り、D S(U )+ dはT(V )≤ L - 1。
ここで簡単のFPTアルゴリズム(だ両方指向、時間における無向場合の動作であるパラメータ)、O (2 L ⋅ M (N + M ))あなたのグラフが大きいがあれば実現可能であるかもしれない、Lはです十分に小さい。私の他の答えでは、無向の場合のポリタイムアルゴリズムを示します。
第1に、質問は(ランタイムでは最大で因数)、特定のエッジeを通過するサイズが最大でlのパスがあるかどうかを尋ねることと同じです。次に、アイディアは、頂点を検査されたエッジの前に現れることができるものと、パスの後にのみ現れることができるものに分割することにより、パスを単純化することです。
Foreach $e=(u,v)\in E$:
a. do for $O(2^l)$ times:
1. Compute a random partition of the vertices set $V=(S,V\setminus S)$
such that $s,u\in S$, $v,t\not \in S$ (and every other vertex is in $S$ w.p. 1/2).
2.Find the shortest path from $s$ to $u$ in the subgraph induced by $S$.
And the shortest path from $v$ to $t$ in the subgraph of $V\setminus S$.
3.If the sum of distances is no more than $l-1$, add $e$ to the output graph.
分析
a。サイズの単純なパスがなかった場合は明らかに、でGを通過する電子は、アルゴリズムはそれを返しません。
b。そのようなパスがある場合、それは正しく分割されます(つまり、前のすべての頂点はSにあり、残りはV ∖ Sにあります)wp 2 − lです。したがって、分割反復をO (2 l)回実行すると、高い確率で発見します。
ランダム化
係数をランタイムに支払う用意がある場合、次のようにランダム化できます。
a -universal-setを取り、ユニバーサルセットのすべての文字列を実行してランダムパーティションステージを置き換え、を文字列の値が1である頂点のセットとして解釈します。ユニバーサルセットのサイズあるO (2 L + L O G 3(L ) ⋅ P O のL Y (N ))ランタイムを決定します。