并查集(Disjoint Set),即“不相交集合”,是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并。
将编号分别为1…N的N个对象划分为不相交集合,在每个集合中,选择其中某个元素代表所在集合。常见两种操作:合并两个集合查找某元素属于哪个集合用编号最小的元素标记所在集合;定义一个数组 set[1..n] ,其中set[i] 表示元素i 所在的集合;find1(x){return set[x];}合并 Θ(N)
Merge1(a,b){ i = min(a,b);j = max(a,b);for (k = 1; k <= N; k++) {if (set[k] == j)set[k] = i;}}对于“合并操作”,必须搜索全部元素!有没有可以改进的地方呢?