并查集推导![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/aad84b48f386292352a1678c40c3ef93.png#pic_center)
并查集例题
例一
有
N
N
N 个计算机中心,开始时都是独立的。后来不断的架设了
M
M
M 条网线,每条网线把其中的
2
2
2 个计算机中心连接起来。
直接或间接连接的计算机中心都可以相互通信,组成一个网络。
问有多少个连通网络?
例二
围棋的棋子有黑色和白色两种,相同颜色的棋子如果是上下或左右相邻的,则称这两个棋子是连通的,直接或间接连通的棋子称为一块棋。
现在,不断给出
N
N
N 个落棋子的信息(颜色、横坐标、纵坐标),问棋盘上有多少块棋?
形象化地描述过程
建立数学模型
计算机中心、棋子——点
网线、相邻——相邻两点关系——边
网络、块——连通块
查找操作(Find)
检查:两个点是否在一个连通块
合并操作(Union)
合并:添加一条连线
算法
暴力算法
一个连通块的点用相同的id表示
检查:只要看两个点的id是否相同!
合并1:加边(3,4),两端点在一个连通块,不用处理。
合并2:加边(5,2),两端点不在一个连通块,怎么办?
合并2:加边(5,2),两端点不在一个连通块
- 改 i d id id 相同
- 通块数
−
1
-1
−1
参考代码:
“暴力”算法的时间复杂度
点 N N N个,边 M M M个:
•合并的时间复杂度: O ( m i n ( N , M ) ∗ N ) O( min(N,M)*N ) O(min(N,M)∗N)
•查找的时间复杂度: O ( 1 ) O(1) O(1)
新方法