我理解前者是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
答案 0 :(得分:1)
Union find是动态连接问题的数据结构,例如,当您在运行时逐个连接边缘并想知道是否存在连接时。想想迷宫或液体渗透。 此外,在动态连接问题中,您通常会处理一组不同的项目。您实际上是在构建等价类。但是,在许多图形问题中,您正在寻找路径或连接组件。
因此,要回答您的问题,如果您正在处理不相交的集合或添加/删除边缘的问题,并希望查看系统何时连接或有多少连接项目,请使用union-find。否则,像DFS / BFS这样的图算法可能更快,更容易实现。