是否存在确定性算法来检查图形是否包含从源到目标的顶点不相交路径,复杂度O(nm^2)
(n是顶点数,m是边数)或者是NP-很难(如果是这样,为什么)?顶点不相交路径表示没有共同内部顶点的路径。例如。
s -> a -> b -> c -> d
s -> x -> y -> z -> d
顶点不相交但是
s -> a -> b -> c -> d
s -> x -> a -> z -> d
^
不是因为a是常见的顶点。
完整的问题是:
答案 0 :(得分:7)
问题(在问题中询问,在s
和t
之间找到“ ONE”顶点不相交路径,这与发布的问题的图片不同)是< strong> not NP-hard
并且可以在多项式时间O(V^2E)
中求解。此外,is there are k disjoint paths between s and t
的问题也是不 NP-Complete
。
上面提到的证明NP-completeness
(http://www.shannarasite.org/kb/kbse48.html)的文章有一个微妙的区别......你不知道s
和t
,因此问题变得困难。但是,一旦修复s
和t
,它就是多项式。
这是在多项式时间内找到a
顶点不相交路径的算法---
将此问题转换为最大流量问题,并使用Dinic's
算法在O(V^2E)
中解决此问题
http://en.wikipedia.org/wiki/Dinitz_blocking_flow_algorithm
这是转换:
选择要在其中找到不相交路径的源s
和目标t
顶点。
对于每个顶点v
,将两个新顶点添加到G'
(我们正在构建的图形),即每个v \in G
添加v_1 and v_2
到G'
。
对于每条边(a,b)
,添加以下边(a_1, a_2)
,(b_1, b_2)
,(a_2, b_1)
和(b_2, a_1)
(请记住,顶点已经被转换,并注意边缘的方向)。
将S
和T
添加到G'
和边(S,s_1)
以及(t_2, T)
。
为所有边分配权重1并运行max-flow算法(S
和T
之间)。如果得到的最大流量为1,则该流量(或路径)对应于原始图形中的顶点不相交路径。
现在要k
种不相交的路径:
为边k
,(S,s_1)
,(t_2, T)
和(s1_, s_2)
.....和权重(t_1, t_2)
分配1
的权重剩下的边缘......再次运行Dinic的算法,如果有最大容量k
,则会给你不相交的路径。
答案 1 :(得分:2)
问题是NP-Hard。这可以通过3-SAT的减少来证明。 Here是证明的草图。
分配n
源/目的地对(每个变量)。用两条路径连接每对,每条路径都有'm'个内部节点(用于'm'子句)。一个路径是变量为'true',另一个为'false'的情况。
还指定'm'源/目的地对(对于每个子句)。用3条路径连接每一对,每条路径 - 通过“变量”路径的相应内部节点,如果该变量在该子句中被否定或不被选择,则选择“真”或“假”路径。
然后找到'm + n'个顶点不相交的路径来解决3-SAT。