Union-Find或DFS:哪个更好找到连接组件?

时间:2015-02-08 19:06:02

标签: algorithm graph-algorithm

Union-Find和DFS都可用于查找连接。在哪种情况下哪一个更好?

3 个答案:

答案 0 :(得分:15)

union-find算法最适合于等价关系发生变化的情况,即有" Union"需要在您的分区集上执行的操作。给定一个固定的无向图,你根本不会改变等价关系 - 边缘都是固定的。 OTOH,如果你有一个添加了新边的图表,DFS不会削减它。虽然DFS渐近比union-find快,但在实践中,可能的决定因素将是您试图解决的实际问题。

tl; dr - 静态图? DFS!动态图?联盟找到的!

答案 1 :(得分:9)

如果图形已经以邻接列表格式存在于内存中,则DFS稍微简单且更快(O(n)对O(n alpha(n)),其中alpha(n)是逆Ackermann),但是union- find可以处理以任何顺序在线到达的边缘,这有时很有用(例如,在主存储器中有太多不适合)。

答案 2 :(得分:0)

如果图形已经以邻接表或矩阵的形式给出,那么 DFS/BFS 更合适,但如果给出边/关系列表,那么它更适合使用 DSU(不相交集),好像你会从边开始制作图表,然后首先制作图表,然后进行 dfs 但通过形成 dsu,您可以直接计算每个组件中的组件数量和节点/边缘数量。

相关问题