对比![](https://img-blog.csdnimg.cn/20201222212938984.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMwMTI0MjQx,size_16,color_FFFFFF,t_70)
结论:很明显,路径压缩可以节省向上搜索的时间。
思考:
在并查集中,我们并不关心,父节点是谁,我们关心的是祖宗。
实现:
# 迭代
def find(x):
while x != pre[x]:
pre[x] = pre[pre[x]]
x = pre[x]
return x
# 递归
def find(x):
if x != pre[x]:
pre[x] = find(pre[x])
return pre[x]
说了这么多,那什么时候用路径压缩,什么时候不用?
根据两幅图,我们不难看出:
- 当我们需要在路径里面找关系的时候,不压缩;
- 当我们更加关注当前节点和他祖宗关系的时候,压缩