登录/注册

并查集

更多

以下是关于并查集(Disjoint Set Union, DSU) 的详细中文解析:


一、什么是并查集?

一种用于高效管理 元素分组动态连通性 的数据结构,支持两种核心操作:

  1. 合并(Union):将两个不相交集合合并为一个。
  2. 查找(Find):确定元素属于哪个集合(通常返回集合的代表元素)。

二、核心思想

  1. 森林表示法
    多棵树表示集合,每棵树的根节点是该集合的代表元素

  2. 路径压缩(Find优化)
    查找时扁平化路径,减少后续查询时间。

    def find(x):
       if parent[x] != x:
           parent[x] = find(parent[x])  # 递归压缩路径
       return parent[x]
  3. 按秩合并(Union优化)
    合并时将小树挂到大树根下,避免树过高。

    def union(x, y):
       rx, ry = find(x), find(y)
       if rx == ry: return
       if rank[rx] < rank[ry]:   # 按秩合并
           parent[rx] = ry
       elif rank[rx] > rank[ry]:
           parent[ry] = rx
       else:
           parent[ry] = rx
           rank[rx] += 1

三、代码模板(Python)

class UnionFind:
    def __init__(self, n):
        self.parent = list(range(n))
        self.rank = [0] * n

    def find(self, x):
        if self.parent[x] != x:
            self.parent[x] = self.find(self.parent[x])
        return self.parent[x]

    def union(self, x, y):
        rx, ry = self.find(x), self.find(y)
        if rx == ry: return

        if self.rank[rx] < self.rank[ry]:
            self.parent[rx] = ry
        elif self.rank[rx] > self.rank[ry]:
            self.parent[ry] = rx
        else:
            self.parent[ry] = rx
            self.rank[rx] += 1

四、时间复杂度

操作 平均时间复杂度
初始化 $O(n)$
Find / Union $\alpha(n)$(近似常数)

$\alpha(n)$ 是反阿克曼函数,通常小于 5(效率接近 $O(1)$)


五、经典应用场景

  1. 连通性问题

    • 判断图中两点是否连通(如:LeetCode 547 省份数量)
      # 遍历所有边,合并相连节点
      for u, v in edges:
      uf.union(u, v)
  2. 最小生成树(Kruskal算法)

    • 按边权重排序后合并,避免成环。
  3. 动态图的连通性
    支持在线添加边并实时查询连通性。

  4. 分组问题

    • 社交网络好友分组、岛屿数量等。

六、例题实战

题目:LeetCode 200. 岛屿数量
思路

def numIslands(grid: List[List[str]]) -> int:
    m, n = len(grid), len(grid[0])
    uf = UnionFind(m * n)

    for i in range(m):
        for j in range(n):
            if grid[i][j] == '0': continue
            idx = i * n + j
            # 检查右方和下方相邻陆地
            for dx, dy in [(1,0), (0,1)]:
                ni, nj = i+dx, j+dy
                if ni < m and nj < n and grid[ni][nj]=='1':
                    nidx = ni * n + nj
                    uf.union(idx, nidx)

    # 统计根节点数量(代表元素)
    roots = set()
    for i in range(m):
        for j in range(n):
            if grid[i][j]=='1':
                roots.add(uf.find(i * n + j))
    return len(roots)

七、常见问题

  1. 如何处理初始化?
    每个元素初始化为独立集合,父节点指向自身。

  2. 为什么需要路径压缩和按秩合并?
    避免树退化成链,保证操作高效性。

  3. 能否用哈希表替代数组?
    可以,但数组更高效(元素编号连续时优先使用)。


总结:并查集是解决动态连通性问题的利器,核心在于路径压缩按秩合并的优化组合,将时间复杂度降至近 $O(1)$ 。掌握其思想后,可灵活应用于图论、分组等问题。

IP纯净度怎么

一、为什么要查IP纯净度 买了服务器或者换了新IP之后,很多人直接就开始用了,结果账号运营一段时间后出现各种问题才发现IP本身就有历史问题。IP纯净度检测应该是所有跨境账号运营开始之前的标准流程,而

2026-04-03 15:52:54

根据ip地址网页怎么查询?

一、通过命令提示符查询查网页(Windows系统) ①按“Win+R”键,打开运营窗口。 根据ip地址查网页怎么查询? ②输入“cmd”+“回车”,打开命令提示符窗口。 ③输入“nslookup

2024-09-29 10:56:44

一文解析(Union-Find)算法原理

并查集(Union-Find)算法是一个专门针对「动态连通性」的算法,我之前写过两次,因为这个算法的考察频率高,而且它也是最小生成树算法的前置知

2023-03-24 18:22:53

机器学习必学的Python代码示例

机器学习必学的Python代码示例集

资料下载 鸭子定律_ 2021-06-21 09:35:46

程度多粒度软粗糙模型综述

算子的性质;再次,定义并研究了程度多粒度软粗糙集的不确定性度量及性质;最后,通过医院对病人诊断的案例验证了模型的实用性。

资料下载 佚名 2021-06-04 16:15:01

一种语义特征图引导的青光眼筛方法

现有的端到端青光眼筛査模型往往忽略细微病变区域而导致过拟合冋题,并且其可解释性区域尚不明确针对上述问题,提出一种语义特征图引导的青光眼筛查方法。利用基于 Mobilenet v2作为特征提取网络

资料下载 佚名 2021-06-03 15:28:50

电子CAD原理图绘制题目

电子CAD原理图绘制题目集

资料下载 agan1 2021-03-22 10:31:55

1000+例各类获奖电赛作品资料(电路篇、代码篇、教程篇……)

本资料汇集了历届电赛的优秀获奖作品,并对所有作品资料进行仔细分类方便用户们选择学习,是一套价值极高的参考学习资料,适合每一位 电子 爱好者、电子工程师和对电赛感兴趣的学生

资料下载 ah此生不换 2019-09-06 11:43:55

什么指令支持原子操作

这个是在面试的时候遇到的问题,当时没有答出来。回到家以后查了查,整理记录下来。 原问题:什么指令集支持原子操作?其原理是什么?

2022-08-02 11:48:20

非洲猪瘟快速筛系统

1970-01-01 08:00:00 至 1970-01-01 08:00:00

非洲猪瘟快速筛系统HM-PCR

1970-01-01 08:00:00 至 1970-01-01 08:00:00

一款袖珍电子线器 电子资料

生活中在布设有照明电路暗线的墙壁上钉铁钉时,要准确找到电线位置并避开来可不是件容易的事;如果自己动手制作一个小小电子查线器,就可以快速、方便地解决这些难题。

2021-04-21 07:20:16

请问GPIOC的时钟怎么

请问:使用F28M35的blinky_m3程序,M3时钟是100MHz,但是灯闪烁的频率只有8MHz左右,灯由GPIOC控制,这就是说GPIOC的时钟其实不是直接使用的M3的时钟,那么请问GPIOC的时钟怎么查?是在哪条语句里面啊?谢谢!

2020-07-14 10:49:14

金鉴智能体温筛机——大数据体温监控+人脸识别+考勤门禁的红外测温设备

机能实现快速体温筛查,是一款集大数据体温监控、人脸识别、考勤门禁功能于一体的红外测温设备,具有高精度快速测温、清晰成像、自动报警功能特点,可以大范围简捷、安全准确、快速锁定体温高温异常人员,迅速

2020-05-06 11:30:22

2019微半导体峰会上老杳出席会议致辞

集微网消息,19日,2019集微半导体峰会在厦门海沧举行,中国半导体投资联盟秘书长、集微网创始人老杳出席会议

2019-07-21 09:06:56

7天热门专题 换一换
相关标签