Union-Find如何与Graphs相关或不同?

时间:2016-10-10 18:50:16

标签: algorithm data-structures graph-theory disjoint-sets

我理解前者是data structure而前者是mathematical structure

但实施后,他们似乎分享了许多相同的功能和行为。

不相交集中的每个元素都可以被视为图中的顶点。图中的边表示Union-Find中的一组。

审核http://algs4.cs.princeton.edu/15uf/http://algs4.cs.princeton.edu/42digraph/

我相信两者都可以回答以下问题:

  • 这两个元素/顶点是否已连接?
  • 有周期吗?

那么我没有看到两者之间有更大的差异吗? 我什么时候应该选择使用另一个?

我看到图算法可以在内部使用Union-Find结构 http://algs4.cs.princeton.edu/43mst/KruskalMST.java.html

实现细节,但如果Union-Find更快,为什么要使用Depth-First Search来测试周期? http://algs4.cs.princeton.edu/44sp/DirectedCycle.java.html

1 个答案:

答案 0 :(得分:1)

Union find是动态连接问题的数据结构,例如,当您在运行时逐个连接边缘并想知道是否存在连接时。想想迷宫或液体渗透。 此外,在动态连接问题中,您通常会处理一组不同的项目。您实际上是在构建等价类。但是,在许多图形问题中,您正在寻找路径或连接组件。

因此,要回答您的问题,如果您正在处理不相交的集合或添加/删除边缘的问题,并希望查看系统何时连接或有多少连接项目,请使用union-find。否则,像DFS / BFS这样的图算法可能更快,更容易实现。