使用链表清除不相交的集合操作Find_Set(x)

时间:2014-01-12 15:16:51

标签: algorithm union-find

它是关于使用不相交集的链表表示的天真的Union-Find算法:
Find_Set(x)操作返回一个指向包含元素x的集合的代表的指针,该元素需要O(1)时间,因为包含x的节点有一个直接指向x的代表的指针。但在此之前我们需要找到特定的在所有不相交的集合中包含元素x的节点。所以这个搜索不是O(1)。我不明白Find_set(x)是如何O(1)(如书中给出的),当我们不知道在哪个disjoint设置包含x的节点所属。

1 个答案:

答案 0 :(得分:0)

假设每个元素包含一些指向它所属的集合的指针/引用(该集合实际上可以由其成员元素之一表示)。所以在查询Find_Set(x)时,由于你已经有了元素x,你只需要查阅这个指针/引用,操作就是O(1)。使用链表实现,其中每个集都存储为元素的链接列表,每个元素都包含一个指向链表头部的指针,该指针被选为集合的代表元素。