algorithm - 查找从源到目标的顶点不相交路径

标签 algorithm graph-theory np

是否有确定性算法来检查图是否包含从源到目的地的顶点不相交路径,复杂度 O(nm^2)(n 是顶点数,m 是数边缘)还是 NP-Hard(如果是,为什么)?顶点不相交路径是指没有公共(public)内部顶点的路径。例如。

s -> a -> b -> c -> d  
s -> x -> y -> z -> d

顶点不相交但是

s -> a -> b -> c -> d
s -> x -> a -> z -> d
          ^

不是,因为 a 是公共(public)顶点。


完整的问题是:

enter image description here

最佳答案

问题(问题中提出的,在st之间找到“ONE”顶点不相交路径,这与图片的不同发布的问题)不是NP-hard,可以在多项式时间内解决O(V^2E)。此外,is there there there there k disjoint paths between s and t 的问题也是NP-Complete

上面提到的用于证明NP-completeness (http://www.shannarasite.org/kb/kbse48.html) 的文章有一个细微的区别....你不知道st,这样问题就变难了。但是,一旦你修复了 st,它就是多项式的。

这是在多项式时间内找到a顶点不相交路径的算法---

将此问题转化为最大流问题并使用Dinic's算法在O(V^2E)中求解 http://en.wikipedia.org/wiki/Dinitz_blocking_flow_algorithm

这是转换:

选择源 s 和目标 t 顶点,您希望在它们之间找到不相交的路径。 对于每个顶点 v 添加两个新顶点到 G' (我们正在构建的图),即对于每个 v\in G 添加 v_1 和 v_2G'

对于每条边 (a,b) 添加以下边 (a_1, a_2), (b_1, b_2), (a_2, b_1)(b_2, a_1)(记住顶点已经变换,并注意边的方向)。

ST添加到G'和边(S,s_1), and (t_2, T)

为所有边分配权重 1 并运行最大流算法(在 ST 之间)。如果最大流量为 1,则该流量(或路径)对应于原始图中的顶点不相交路径。

现在输入 k 个不相交的路径:

为边 (S,s_1), (t_2, T) , (s1_, s_2) 分配权重 k , 和 (t_1, t_2).....和权重 1 剩余的边缘...再次运行 Dinic 的算法,如果有容量 k 的最大流量,为您提供不相交的路径。

关于algorithm - 查找从源到目标的顶点不相交路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16312635/

相关文章:

javascript - 生成图的每种拓扑排序

performance - 我需要解决NP难题。有希望吗?

algorithm - 使用标准集优化资源分配

algorithm - 在有向图中检测循环的最佳算法

algorithm - 在图中找到一组顶点,使每个顶点都能到达 k 个其他顶点

algorithm - 效用最大化分配

integration - 集成 np、np 完整、np 是困难的还是以上都不是?

SQL 查询让 child 拥有相同数量的玩具

algorithm - 以最佳方式将多个文件分组

algorithm - 订单转换