博客
关于我
并查集(初学)
阅读量:334 次
发布时间:2019-03-04

本文共 846 字,大约阅读时间需要 2 分钟。

并查集是一种高效的数据结构管理算法,主要用于合并和查找操作。它通过路径压缩和按秩合并两个优化手段,确保了几乎常数时间复杂度的性能。

并查集的基本原理

并查集由两个主要函数组成:查找(Find)和合并(Union)。查找函数用于确定节点所属的集合,合并函数用于将两个集合合并成一个。

查找函数(Find)

查找函数的主要作用是找到一个节点的根节点,通过路径压缩优化,将节点直接连接到根节点,减少后续查询的时间。

int find(int root) {    int son = root;    while (root != pre[root]) { // 查找上级        root = pre[root];    }    return root; // 返回上级}

合并函数(Union)

合并函数用于将两个节点所在的集合合并。首先查找两个节点的根节点,如果根节点不同,则将其中一个根节点的父节点指向另一个根节点。

int union(int start, int finish) {    int root1 = find(start);    int root2 = find(finish);    if (root1 != root2) { // 如果父类节点不相同(既构成不了环路)        pre[root1] = root2;    }}

路径压缩优化

为了提升查找效率,查找函数会在路径压缩过程中将节点直接连接到根节点,减少后续查找的时间。

while (son != root) { // 路径压缩    int cmp = pre[son];    pre[son] = root; // 把上级节点赋值为根节点    son = cmp;}

按秩合并优化

在合并两个集合时,按秩合并优化会将较小的树合并到较大的树上,保持树的高度平衡,确保操作的时间复杂度。

通过以上方法,并查集能够高效地管理图中的连通区域,广泛应用于图论、网络管理和分布式系统等领域。

转载地址:http://xxqq.baihongyu.com/

你可能感兴趣的文章
POJ1182(带权并查集)
查看>>
Qt笔记——Qt初探、PyQt5和Qt5
查看>>
poj1190生日蛋糕
查看>>
POJ1218 HDU1337 ZOJ1350 UVALive2557 THE DRUNK JAILER
查看>>
poj1222 EXTENDED LIGHTS OUT(gauss)
查看>>
POJ1240 m叉树
查看>>
Poj1328--Radar Installation(区间选点)
查看>>
POJ1384Piggy-Bank(DP)
查看>>
POJ1417 True Liars —— 并查集 + DP
查看>>
Poj1459 Power Network 预流推进
查看>>
POJ1502(MPI Maelstrom)
查看>>
poj1568 Find the Winning Move[极大极小搜索+alpha-beta剪枝]
查看>>
poj1730 - Perfect Pth Powers(完全平方数)(水题)
查看>>
poj1753——Flip Game
查看>>
poj1936 假期计划第一水
查看>>
poj1958-汉诺四塔问题(三种方法)
查看>>
poj1988(并查集)
查看>>
POJ2007+几何+极角排序
查看>>
poj2039
查看>>
poj2135(简单的最小费用流问题)
查看>>