Lecture 15.2

本文深入探讨并查集这一数据结构,包括其在图论问题中的应用,如图像处理和迷宫生成。定义了并查集用于实现集合划分的概念,并介绍了两种优化方法:树的高度平衡和路径压缩,以提高查询和合并操作的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

绪论

我们前面介绍了树,二叉树,特殊二叉树,堆系列,哈夫曼编码,BST系列,课件上将并查集作为树的最后一个章节进行介绍。

事实上并查集比起前面的BST系列,在实现和优化方面都要简单很多,但是在使用方面反而更加灵活,往往可以用来解决一些意料之外的图论问题。


Definition

首先我们需要知道并查集用来实现什么样的概念。并查集一般是用来实现离散数学中集合划分的概念,那么问题又来了,什么叫做离散数学中的集合划分?

简单来说,集合划分就是将一个非空集合分割成若干个较小的非空集合。原集合中的每一个元素一定属于且仅属于一个较小的非空集合。

如果希望离散数学中的概念来解释集合划分,首先需要知道什么叫做等价关系:

集合A上的等价关系~指的是对于集合A,二元关系~具有自反性,对称性和传递性,即满足如下条件:

在这里插入图片描述
根据等价关系的定义,我们可以将集合上所有的元素按照是否存在关系分成若干个小集合,每个小集合可以通过小集合中的任意一个元素表示,划分的结果我们称为不相交集合(disjoint sets)。

实际问题中,往往将a和b的二元关系看作一个连接或者说连通。

在这里插入图片描述

对于实际问题,我们除了需要查询某个元素属于哪个集合,还需要能够将两个子集合通过一个“连接”合并起来。

为了实现这样一个概念,我们第一想到的方法是给每个元素添加一个属性,用来记录该元素当前存储于哪个子集合中。

这样实现,查询每个元素属于哪个集合的复杂度只需要访问添加的属性,复杂度为O(1)。但当我们需要对集合进行合并时,需要将所有的元素全部遍历一遍然后找到被合并的集合中的元素来修改他们的属性,最坏复杂度为O(n)。

这里存储的是子集合代表元素的下标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值