- 并查集是什么
- 并查集是一种非常精巧而实用的数据结构。它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的Kruskal算法和求最近的公共祖先等。
- 并查集的基本操作主要有
- 初始化init
// 假如编号有1,2,3,……,n的n个元素,用一个数组fa[]来存储每个元素的节点。一开始,先将父节点设为自己 function init(n) { const fa = [] for (let i = 1; i <= n; i++) { fa[i] = i } }
- 查询find
function find(i) { if (fa[i] == i) { //递归出口,当到达了祖先位置,就返回祖先 return i } else { fa[i] = find(fa[i]) //进行了路径压缩 return fa[i] //返回父节点 } }
- 合并unionn
function unionn(i, j) { const i_fa = find(i) //找到i的祖先 const j_fa = find(j) //找到j的祖先 fa[i_fa] = j_fa //i的祖先指向j的祖先 }