并查集(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、 依次循环处理,当所有点都被分类后,即完成。

quick-find算法
quick-find算法示意图

quick-union算法
quick-union算法
quick-union算法示意图

加权quick-union
压缩路径加权quick-union

复杂度
复杂度表

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章