给定一个有向图和两个顶点。如果从到的一对简单路径不共享边,则它们是边不相交的。š ,吨∈ V p 1,p 2小号吨
使用最大流量,很容易确定是否存在从到的一对边缘不相交的路径。现在,是否存在一个多项式时间延迟算法来枚举从到所有边缘不相交路径对?牛逼小号
给定一个有向图和两个顶点。如果从到的一对简单路径不共享边,则它们是边不相交的。š ,吨∈ V p 1,p 2小号吨
使用最大流量,很容易确定是否存在从到的一对边缘不相交的路径。现在,是否存在一个多项式时间延迟算法来枚举从到所有边缘不相交路径对?牛逼小号
Answers:
我相信Artem Kaznatcheev的答案是正确的,但是它没有给出多项式空间。因此,这是一种不同的方法,应该在这方面做得更好。
使用最大流可以解决一个稍微更普遍的问题:找到一条从某些两个顶点{s1,s2}到另一些顶点{t1,t2}的边不相交的路径,但不控制连接哪个源顶点到哪个目标顶点。
假设我们有一个图G和顶点s1,s2,t1,t2,我们要列出所有路径对。找出一对路径P1,P2,并令e =(s1,v)为其中一条路径的第一条边。然后,我们可以将问题空间分为两个子问题:使用e的路径对与G-s1中从{v,s2}到{t1,t2}的路径相同,以及不使用的路径对e与Ge中从{s1,s2}到{t1,t2}的路径相同。在这两个子问题中都递归,并且(为避免重复)仅在递归底部时才报告路径。
这是我第一次阅读多项式延迟算法,因此我不能百分百确定我的回答,但是我认为类似以下内容的方法应该有效。
选择一些约定,以表示具有自然总排序路径。(一个示例只是按字典顺序列出路径的顶点和顺序)。选择您喜欢的支持对数搜索和插入的就地数据结构D(例如一棵红黑树)。令G为您的图表
定义算法:
:
(此处* D表示对原位数据结构D的引用)
如果不在D中。
2.1。将插入D(如果您假设在算法运行时输出,则将其输出)。
2.2。对于每个边缘运行˚F (小号,吨,G ^ - { ü v } ,* d )
现在,枚举所有的路径,创建一个空以及对于每一对小号,吨∈ V (G ^ )与小号< 吨(如果是无向图,小号≠ 吨以其他方式)运行˚F (小号,吨,G ^ ,* D )。您将在初次看到它们时输出每个路径,并且还将拥有一个不错的可搜索数据结构,其中包含完成后的所有路径。请注意,此算法还在输入+输出大小的多项式时间内运行(就像任何多项式延迟算法一样)。
我怀疑这是执行此操作的最佳方法,特别是这种方法不在(在输入大小上)。我认为,通过仔细考虑,您可以找到可以在P S P A C E中运行的内容,尽管它无法随着时间的推移构建数据结构。