【问题标题】:path between two disjoint sets (path algorithm)两个不相交集之间的路径(路径算法)
【发布时间】:2017-08-10 19:29:41
【问题描述】:

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

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

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

不胜感激。

【问题讨论】:

标签: algorithm graph-theory


【解决方案1】:

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

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

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

现在FIND(a1) 准确返回属于A 的顶点集合,FIND(b1) 准确返回属于B 的集合顶点。特别是,如果AB 相互交叉,则FIND(a1)=FIND(b1)。对于图中的每条边(u,v),执行UNION(FIND(u), FIND(v))

AB 之间存在路径当且仅当在上述过程中您已将a1 集合与b1 集合合并。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多