如果我有n个单节点树并且m找到集合操作(注意:没有联合,假设之前已经完成了联合)并且仅使用路径压缩,那么这需要花费O(m)时间吗?我一直试图证明这一点,但似乎并非如此。由于联盟没有按等级使用联合,因此查找集可能需要花费O(n)时间。但是,m发现集是否仍有可能在O(m)时间内完成?
答案 0 :(得分:2)
这通常不需要花费时间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。