algorithm - 查找具有路径压缩而不按等级并集的集合

标签 algorithm data-structures time-complexity disjoint-sets amortized-analysis

如果我有 n 个单节点树和 m 个查找集合操作(​​注意:没有并集,假设之前已经完成并集)并且只使用路径压缩,这真的需要 O(m) 时间吗?我一直试图证明这一点,但似乎并非如此。由于并集没有按等级使用并集,因此查找集最多可能需要 O(n) 时间。但是是否仍然有可能在 O(m) 时间内完成 m 个查找集?

最佳答案

这通常不会花费 O(m) 的时间来完成。想象一下,n 个节点被分成 √n 个组,并且在每个组内,所有节点都链接在一起形成一个大小为 √n 的链表。现在,如果您进行 √n 次查找操作,每个链表的根一个,完成的总工作量将为 Θ(n),因为您必须更新组中几乎每个节点上的指针。

但是,如果您以不同的顺序执行查找操作(例如,从链表的末尾开始并向后工作),您可以在 O(n) 时间内完成 n 次操作。

一般来说,the cost of union-find using only path compressions is O(m log n + n) for m operations on n nodes .

关于algorithm - 查找具有路径压缩而不按等级并集的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36144470/

相关文章:

algorithm - 从图中消除循环流

algorithm - 查找访问有向图的所有顶点恰好一次的路径

c - 为什么我们需要一个 "Circular Linked List"(单或双)数据结构?

c++ - 递归函数的时间复杂度,其中递归减少了大小

algorithm - 确定多个函数调用的运行时间

c - 数组中最低的 n 个数字

python - 将列表列表替换为 "condensed"列表列表,同时保持顺序

c++ - 在 C++ 中查找队列的重复状态(顺序相同的元素)

algorithm - 在大文件中查找重复项

c - 尝试计算函数的时间和存储复杂度 (C)