一周学习总结

这周主要学习了并查集。图论方面看了增广路最大流。没怎么懂。

并查集是一种用于不相交集合的数据结构。(算法导论第21章)

目前已知的,渐近意义上最快的是森林实现。其实和堆类似,利用数组进行存储。节点内容为其父节点的标号。

主要包括三种操作。

Makeset( ) 初始化数组和相应的辅助结构。

Findset( ) 递归或非递归地循环寻找根节点。为防止森林退化为链式,应用了路径压缩来减少深度。

Union( ) 森林的合并。使用按秩合并,通过根的rank值比较再合并可以优化形态。

 

对于作用于n个元素的m个不相交集合操作,使用按秩合并和路径压缩的启发式方法的运行时间为O(m*a(n))。可证明的a(n)<=4

 

关于并查集的经典应用是最小生成树的kruskal算法。

 

这周做的并查集题目:

POJ 2524 Ubiquitous Religions:没什么好说的,并查集的最简单应用。注意是判断最多有多少种。所以一开始总数和n相同,每次合并总数减一。

 

POJ 1611 The Suspects:也是简单题,每组只要把第一个元素和后面合并。最后找0所在集合的元素个数就好。

 

POJ 1703 Find them, Catch them:主要思想就是敌人的敌人是朋友。存在一个循环关系。多增加一个集合来存储相反元素来表示这种关系。算法艺术上有类似题目。

 

POJ 2236 Wireless Network:我是将所有已修好的存储起来。每次新修好一台就遍历已修好的。把可连通集合的合并。查询时只要判断是否在同一个集合就好。

 

POJ 2492 A Bug's Life:有点邪恶的题目,我先声明这不是我对同性恋歧视……也是存储一个相反关系。设AB发生关系,BC发生关系,若AC发生关系,则是Suspicious

 

POJ 1988 Cube Stacking:有些难度的题目,要附加存储向上的与根节点的关系,那么在改变根节点的时候自然改变子节点。很能体现高级数据结构的思想。同时,题目要求向下的个数,却存储向上的个数,逆向思维拓宽思路。算法艺术上的银河英雄传说与之相似。

 

POJ 1182 食物链:难得的中文题。有相当难度。我的思路与1703类似,是3者的循环关系。构造一个逻辑上的三角形,顶点通过并查集维护。关键在于不使用3个数组而使用一个3倍长数组。这样可以解决在逻辑上旋转三角形时候的对应关系。雷同学则将所有元素并成一个集合,通过计算得到相应元素关系。思路比较复杂,但时间和空间复杂度要更优一些。

 

POJ 1258 Agri-Net:图论,给一个邻接矩阵,求最小生成树。为了练习Kruskal找来的简单题。是无向图,所以只要接收半个邻接矩阵就好,可以节约一些空间。

下周应该会学树状数组和KMP,也是很难懂的东西。发现自己会的实在太少……还是菜鸟

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值