博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并查集的实现Java
阅读量:7103 次
发布时间:2019-06-28

本文共 1357 字,大约阅读时间需要 4 分钟。

package unionFind;/**  find方法中路径压缩彻底。* 复杂度为O(log*n),仅次于O(1)*   log*n=1+log*(logn)** */public class UnionFind6 implements UF {    private int[] parent;    private int[] rank;    public UnionFind6(int size) {        parent=new int[size];        rank=new int[size];        for (int i = 0; i < size; i++) {            parent[i]=i;            rank[i]=1;        }    }    @Override    public int getSize() {        return parent.length;    }    /* find(p) 是找到p元素的根节点的值          */    /* isConnected(p,q)   就是看find(p)==find(q)  */    private int find(int p){        //第一种:路径压缩的find的方法,但是压缩的不彻底。        /*while (p!=parent[p]){            *//*  路径压缩  p的值改为p的上上节点的值,下次查找可以节省查找次数*//*            *//* 压缩后树的高度减少了,但是rank值不需要改变。所以rank并不等于高度。*//*            parent[p]=parent[parent[p]];            p=parent[p];}        return p;*/        //第二种实现:路径压缩彻底,每一个元素直接指向根节点。        //递归实现 ,递归有一定的性能消耗,所以耗时更长。        if (p!=parent[p])            parent[p]=find(parent[p]);        return parent[p];    }    @Override    public boolean isConnected(int p, int q) {        return find(p)==find(q);    }    /*  find(p)=find(q)   */    @Override    public void unionElements(int p, int q) {        int pRoot=find(p);        int qRoot=find(q);        if (qRoot==pRoot)            return;        // 元素rank少的,合并到元素多的        if (rank[pRoot]

转载于:https://juejin.im/post/5d08bb70f265da1ba252614e

你可能感兴趣的文章
zabbix添加端口监控
查看>>
放假前的“例行安检”
查看>>
基本形态学算法
查看>>
PostgreSQL 11 1Kw TPCC , 1亿 TPCB 7*24 强压耐久测试
查看>>
修改toolbar自适应报表宽度
查看>>
Linux基础命令---chkconfig
查看>>
Arista Networks推出400千兆以太网交换机
查看>>
企业网站需要什么样内容才能满足和吸引到用户?
查看>>
关于 Java NIO Buffer 使用的详细解读
查看>>
以太坊系列之十三: evm指令集
查看>>
9、MySQL函数
查看>>
powerdesigner使用sql文件生成uml图
查看>>
Scala的类层级讲解
查看>>
微信api 源码分享
查看>>
泰坦尼克乘客存活状况(决策树案例)
查看>>
博客计划【推荐系统】
查看>>
iptables杂记
查看>>
JPress v2.0-rc.8 发布,新增插件开发的代码生成器
查看>>
RHEL和Debian上生成随机密码-mkpasswd
查看>>
图片转字符图片(三)
查看>>