我一直在研究不相交的集合数据结构。
我有一个查询,在按照排名&使用union时路径压缩在一起,如果我们跳过使用联盟排名&分配优先级(父级)没有任何排名比较(根系/代表元素的排名)两组(树)会影响运行时间。
虽然在合并两个集合时需要加权联合启发式,但要将较小的集合附加到较大的集合以尽可能地进行最小更新以指向代表元素。
在合并两组时使用逐级联盟(类似于加权联合)。但是如果我们跳过比较等级和&随机分配优先级,它不会影响运行时间??那么我们为什么要使用它...我无法清楚地看清楚,如果我错了请帮助我理解。
//没有排名比较
UNION(X,Y)
x.parent = Y;
一般化代码
union(x,y){
if(x.rank>y.rank)
y.parent=x;
else
x.parent=y;
if(x.rank==y.rank)
y.rank=y.rank+1;
}
答案 0 :(得分:0)
如果我们考虑n个不相交的sigleton元素,并且我们对它们应用union函数,使得总是一个set的根(即在表的表示中形成的树)与单个元素结合,然后在所有这些联合案例路径压缩都没有效果,我们最终可能会创建一个链表。
在这种最坏的情况下,单个查找的复杂度可以是θ(n),而排除两个集合的查找的联合仍然是θ(1),因为它是按秩排列联合时的情况。因此,通过使用按行保持θ(lgn)的联合,可以改善集合上各个查询的最坏情况复杂性。
如果我们考虑最终在所有查询之后获得1或者常数的最终集合的情况,那么如果使用路径压缩,则按等级联合会在总体复杂性上产生一些差异。