并查集路径优化
我们想要查找4的掌门时,发现他很深,我们可以在查找过程中降低他的深度。
第一种方法
将每一个节点的父节点,置换为爷爷节点,这样可以减少数的高度。
f[x]=f[f[x]]
结果如下图所示
代码:
int query(int x){
if(x!=f[x]){
f[x]=f[f[x]];
query(f[x])
}
return x;
}
虽然数的高度降低了,但是,并没有达到最优。
这样的一棵树才是最优的
实现:
int query(int x){
if(x!=f[x]){
f[x]=query(f[x])
}
return x;
}