两个不相交集之间的路径(路径算法)

时间:2017-03-19 14:56:16

标签: algorithm graph-theory

我有以下问题。我在图中有两个不相交的顶点集,我想知道这两个集之间是否存在路径。

我只需知道存在这样的路径。

我已经在某处读过这可以使用union-find数据结构来解决,但我找不到适合我需要的算法

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

使用Union-Find data structure可以有效地解决问题。

AB表示两组顶点,并初始化Union-Find数据结构,使图形的每个顶点v属于它自己的集合。

a1成为A的任意顶点。对UNION(FIND(a1), FIND(a))中的每个顶点a执行A(除了a1之外的所有顶点都将成为该集合的代表)。然后对B中的顶点执行相同的操作:让b1成为B的任意顶点,并为UNION(FIND(b1), FIND(b))的每个顶点b执行B }。

现在FIND(a1)完全返回属于AFIND(b1)的顶点集合,返回属于B的集合顶点。特别是,如果AB相互交叉,那么FIND(a1)=FIND(b1)。对于图表中的每条边(u,v),请执行UNION(FIND(u), FIND(v))

当且仅当在上述过程中您已将A的集合与B的集合合并时,a1b1之间存在路径。

您完成的UNION / FIND操作次数最多为O(|E|+|A|+|B|)。因此,算法的运行时间为O(alpha(n)*(|E|+|A|+|B|)),其中alpha(n)Inverse Ackerman function。 Inverse Ackerman函数增长非常缓慢,是每个UNION或FIND操作的运行时间的上限。