并查集(union-find)算法理解

在图像处理中,往往会遇到连通域判断的情况,而在处理过程中往往是利用并查集(union-find)算法。
并查集(Union-Find)是解决动态连通性问题的一类非常高效的数据结构。并查集主要分为两个过程;1、查,2、并。查主要目的是查找满足联通的点,并主要目的是将查到的点合并到连通域中。
并查集有三种常见算法:quick-find、quick-union、加权quick-union,其中检测速度也是一次递增。

quick-find算法:
1、 对每一点进行标记
2、 将第一点作为种子点
3、 依次搜索其他点,如果点满足与种子点联通,那么将该点的标记点值修改为种子点值(其所属的点都需要被循环一遍,会限制处理速度),如果不满足,那么该点也作为种子点。
4、 依次循环处理,当所有点都被分类后,即完成。

quick-union算法:
该算法用到树的处理思想
1、 对每一个点进行标记
2、 将第一点作为种子点
3、 依次搜索其他点,如果点满足与种子点联通,那么将该点的标记值修改为种子点的索引值,这样可以避免对其所属点进行循环修改。可以提到算法效率。如果不满足,那么该点也作为种子点,即根节点。
4、 依次循环处理,当所有点都被分类后,即完成。

压缩路径加权quick-union:
由于quick-union算法在完成标记连通域后,查找某一连通域是,需要不断查找根节点(即树高为2),这里便会限制处理速度,因此加权办法就降低数的高度,这样可以提高搜索速度。
1、 对每一个点进行标记
2、 将第一点作为种子点
3、 依次搜索其他点,如果点满足与种子点联通,那么将该点的标记值修改为种子点的根索引值,这样可以避免对其查找时的效率损失。可以提到算法效率。如果不满足,那么该点也作为种子点,即根节点。
4、 依次循环处理,当所有点都被分类后,即完成。

并查集(union-find)算法理解_第1张图片
quick-find算法示意图

并查集(union-find)算法理解_第2张图片
并查集(union-find)算法理解_第3张图片
quick-union算法示意图

并查集(union-find)算法理解_第4张图片
压缩路径加权quick-union

并查集(union-find)算法理解_第5张图片
复杂度表

代码下载链接:https://download.csdn.net/download/OEMT_301/12101456
代码包含两种算法:quick-find算法和压缩路径quick-union算法,其中处理100的连通域,每个连通域各100个点,quick-find算法处理时间为6.79924s,压缩路径quick-union算法为1.03054s。

你可能感兴趣的:(算法,并查集(union-find))