- 并查集
- 图
- 介绍
- 操作
- 实现
- 优化
- 路径压缩
- 复杂度
- 并查集是一种树形结构
- 并查集是为了高效解决连接问题
- 判断网络中节点间的连接状态, 网络是个抽象概念,用户之间形成的网络
- 数学中的集合类实现
- 连接问题 和 路径问题
- 比路径问题要回答的问题少
- 和二分查找做比较
- 和select做比较
- 和堆作比较
- 比路径问题要回答的问题少
- 对于一组数据,主要支持两个操作
- union(p, q)
- find(p)
- 用来回答一个问题
- isConnected(p, q)
-
并查集的使用普通数组实现
-
并查集的使用parent指针数组实现
- 将每个元素看作是一个节点, 使用指针指向父亲节点的树, 依然使用数组
- 使用size数组优化
- 使用rank数组优化
- 节点p 指向 parent[p] 的 父节点 parent[parent[p]],每次向上走两步
- 使用递归,将每个节点不断向上查找parent[p], 使得 p 指向根节点parent[p],使得以parent[p]为根节点的高度为 2;
时间复杂度: 近乎是O(1)
-
节点
-
边
-
应用场景
- 交通运输
- 社交网络
- 互联网
- 工作安排
- 脑区活动
- 程序执行状态
-
图的分类
- 从方向看
- 无向图 (是一种特殊的有向图)
- 有向图
- 从权来看
- 有权图
- 无权图
- 从方向看
-
图的连通性
-
简单图
- 自环边
- 平行边
-
图的表示
- 邻接矩阵, 适合稠密图(完全图)
- 领接表, 适合稀疏图
-
遍历邻边
- 相邻节点迭代器
-
图的遍历
- 深度优先遍历, 求图中的连通分量, 寻路
- 广度优先遍历, 最短路径(无权图)
-
无权图的应用
- ps的魔棒,扫雷,(flood fill算法),连通分量
- 迷宫生成,迷宫本质是生成一棵树
- 欧拉路径
- 哈密尔顿路径
- 二分图
- 地图填色