#数据结构与算法学习笔记#PTA15:并查集+按秩归并+路径压缩(C/C++)

本文是关于数据结构与算法的学习笔记,重点讨论了如何使用并查集解决PTA15题。通过按秩归并和路径压缩技术,优化了查找根节点的时间复杂度,以处理大规模网络连接问题。文章还介绍了输入输出规格,并给出了实现代码。

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

2018.5.4

 

昨天写完最小堆之后,一兴起看了一晚上的区块链,总算对炒得火热的区块链有了一些大致的了解。今天有点晚,明天会发一篇关于区块链的文章,欢迎各位与我交流探讨。

这一题说的是,一个网络中有N台主机,当输入I的时候,对某两台主机进行网络连接;当输入C的时候,对两个主机是否连接进行检查;当输入S的时候,对整个网络的连接状态进行检查,并结束任务。本题主要考察并查集的知识,题目本身不难。如果能够想到用数组作为存储结构,那这道题就特别简单明了了,每一个数组下标代表主机编号,数组元素代表该主机结点连接的父结点,由此可以形成一棵普通树结构连接的集合网络。判断两个主机是否连接,只要判断其所在集合根节点是否相同即可。

这里还需要注意的问题是时间复杂度。在连接每一对主机时,若只是简单地进行集合归并,那会变成一棵左右子树及其不平衡的的树,这种一边倾斜的树结构在每次查找根节点操作时的复杂度都为o(N),整体复杂度接近o(N^2),当集合元素大到一定程度时基本走不通。因此要考虑“按秩归并”和“路径压缩”。

本题笔者所依赖的秩序是“规模”,即每一集合的结点个数。实际操作时,当主机1所属集合根节点规模小于主机2的(规模依靠根节点数组元素值存储,如根节点值为-5,代表该集合规模为5个元素,注意比较时两者为负数),则将主机1对应结合连接到主机2根节点上(将规模小的集合根节点连接到规模大的集合根节点上)。这种按秩归并方法可以使得树高最大限度上减小,提高查找效率,复杂度为o(logN),加上路径压缩后复杂度甚至可以达到o(log*N)(表示logloglog……取多次),但这题数据量较小,logN与log*N两者差别不大。

“按秩归并”和“路径压缩”原理图:

 

本题要求:

We have a network of computers and a list of

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值