文章目录
前言
以往出过一期并查集的简单入门:
一篇文章了解并查集
路径压缩
路径压缩实际上是在数据量太大的时候,访问一些数据可能在位于叶子位置,导致访问的效率不高,这个时候有两种方法进行提高效率:
- 两颗树合并的时候,节点少的树往节点多的树合并。目的:为了使节点层数增多的节点相对减少。
- 查找的时候对该路径上的节点进行路径压缩。 目的:使更多的节点在第二层。
最好不要用递归的时候进行路径压缩,因为路径深可能导致栈溢出。
若在上图查找1,我们查找完之后图应该变为下面这样:
即1,2,3,8的处的索引都指向0(父亲),这样就进行了压缩,并且查找的时候本身就会去找根,所以开销不是很大。
while (_unionset[cur] >= 0)到0这个点的时候存储的就是负数,就会结束了。
FindRoot函数进行压缩,Union进行小树合并到大树。
#include
#include
#include
结束了~