并查集

25 阅读1分钟
  • 并查集是什么
    • 并查集是一种非常精巧而实用的数据结构。它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的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的祖先
    }