【集合与森林】并查集

本文介绍了并查集这一数据结构,包括其构成、数组初始化、find和connect函数的构建,以及并查集的优化方法——路径压缩和按秩合并。通过解决多个练习题,例如判断亲戚关系、村村通问题和罪犯关押问题,展示了并查集在解决实际问题中的应用。
摘要由CSDN通过智能技术生成

并查集简介及构成:

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。合并及查询即代表"并"和"查"。
并查集由一个整数数组parent[],两个函数find和connect构成。

  • parent[]数组记录每一个元素的前驱节点是什么。
  • find用于查找指定元素属于哪个集合(表现形式一般为查找该元素的根节点),
  • connect用于连接两个集合(表现形式一般为根节点不一样的两个元素)。

构建并查集的命名可以和上述不同。比如parent可以根据实际意义改为father,root等等。find一般不需要修改名称,因为在几乎所有的场景这个函数都代表查找的意思。connect也可以叫union等等。

并查集的主要作用是求连通分支数,比如无向图有多少连通分支,图中A和B两个顶点是否连通等。

构建并查集

【数组初始化】

一般情况数组parent初始化时将所有元素设为自己,但是也有特殊情况。比如各种岛屿包围的问题。具体情况要具体看。

对于数据是int型元素构建并查集可以使用数组,但是有时我们要为字符串等其它类型元素构建并查集,因此很多时候需要使用哈希,即unordered_map来做数组存储。

【find函数的构建】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值