繁体   English   中英

在无向图中的两个顶点之间的所有简单路径上查找所有*顶点*

[英]Find all *vertices* on all simple paths between two vertices in an undirected graph

枚举任意图中两个顶点之间的所有简单路径通常需要指数时间,因为顶点之间可能存在指数个简单路径。 但是,如果我们只对两个端点之间的至少一条简单路径上的顶点感兴趣呢?

那就是: 给定一个无向图和两个不同的顶点,是否有一个多项式时间算法,它找到位于两个顶点之间的至少一条简单路径上的每个顶点? 这与连接不同; 死胡同和死胡同被排除在外。 但是,分支和连接路径是允许的。

我发现编写一个看起来像是解决了这个问题的算法非常容易,但在某些情况下要么失败,要么在病态情况下需要指数运行时间。

更一般地说: 给定图中两个不相交的顶点集,是否存在多项式时间算法,该算法找到位于从一个集合中的顶点到另一个集合中的顶点的简单路径上的所有顶点?

(请原谅我,如果有一个非常明显的解决方案。当然感觉应该有。)

这是线性时间确定性解决方案。 在两个末端顶点之间插入一条边(让我们称之为a和b),如果这样的边不存在,则将问题转化为找到最大的顶点集v的问题,该顶点集位于通过a和湾 你可以说服自己这样一个集合对应于包含a和b的最大子图,它不能通过删除任何节点(也称为双连通组件)来断开连接。 本页描述了Hopcroft和Tarjan的概念和经典线性时间(基于DFS)算法,以识别所有双连通组件(您只需要包含a和b的组件)。

关于两个集合之间的简单路径的第二个问题(让我们称之为A和B)可以通过创建一个新的顶点a,边缘到A中的所有顶点,以及一个顶点b,边缘到B中的所有顶点,可以简化为第一个问题。然后解决你的第一个问题a和b。

你介意一个概率解决方案吗? 也就是说,它不能保证找到所有顶点,但它通常首先尝试,并且绝大多数可能在2或3次尝试之后?

如果你没关系,可以随机为每个边沿分配一个电阻,如果你把电源放在电压为1,接收器的电压为0,则求解每个节点的电压。连接它的两个节点的任何边缘在不同的电压下显然是在一条简单的路径上(路径很容易构建,只是从一端经过上升电压,从另一端下降)。 连接它的两个节点处于相同电压的边缘极不可能在简单的路径上,尽管理论上可能发生这种情况。

重复几个随机分配的阻力组,你很可能找到了简单路径上的所有边。 (你没有证明这个答案,但错误的可能性很小。)

当然,一旦你知道了简单路径上的所有边缘,获得简单路径上的所有顶点都是微不足道的。

更新

我相信以下是真的,但没有证据。 假设我们采取一组电阻并计算出电压。 对于处于简单路径中的每个边缘,存在另一边缘(可能相同),使得仅改变该边缘的电阻将导致第一边缘上的电压变化。 如果是这样,则可以在多项式时间内识别简单路径中的每个边缘。

直观地说,这对我有意义,但我不知道我将如何证明它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM