当前位置: 首页 > wzjs >正文

佛山做网站91

佛山做网站,91,做网站网页尺寸是多少,公司的网站如何建设并查集(Union-Find)是一种高效处理元素分组和集合操作的数据结构,主要用于解决动态连通性问题,例如判断两个元素是否属于同一集合、合并两个集合等。其核心操作包括:查找(Find)和合并&#xff0…
并查集(Union-Find)是一种高效处理元素分组和集合操作的数据结构,主要用于解决动态连通性问题,例如判断两个元素是否属于同一集合、合并两个集合等。其核心操作包括:查找(Find)和合并(Union)。

并查集的基本概念

  1. 集合表示
    用树形结构表示集合,每个节点包含一个父节点指针。例如,元素x的父节点为parent[x],当parent[x]=x时, x是集合的根节点(代表元)。
  2. 核心操作
    • 查找(Find):找到元素所属集合的根节点,用于判断两个元素是否连通。
    • 合并(Union):将两个集合合并为一个集合,通过将一个集合的根节点指向另一个集合的根节点实现。

并查集的实现与优化

基础实现
public class UnionFind {private int[] parent; // 父节点数组// 初始化:每个元素自成一个集合public UnionFind(int n) {parent = new int[n + 1];for (int i = 1; i <= n; i++) {parent[i] = i;}}// 查找元素x的根节点(路径压缩前)public int find(int x) {if (parent[x] != x) {return find(parent[x]);}return x;}// 合并集合x和集合ypublic void union(int x, int y) {int rootX = find(x);int rootY = find(y);if (rootX != rootY) {parent[rootY] = rootX;}}// 判断x和y是否连通public boolean isConnected(int x, int y) {return find(x) == find(y);}
}
优化 1:路径压缩(Path Compression)
查找时将路径上的所有节点直接指向根节点,降低树的高度,使查找时间复杂度接近常数。
注意:有时路径压缩会影响后续操作,因为路径压缩时路径上的节点会直接连接到根节点。
相关例题: [蓝桥杯 2024 国 Python B] 设计-CSDN博客
public int find(int x) {if (parent[x] != x) {parent[x] = find(parent[x]); // 路径压缩:父节点直接指向根}return parent[x];
}
优化 2:按秩合并(Union by Rank)
合并时将秩(树的高度或大小)较小的树合并到秩较大的树下,避免树退化为链表。
private int[] rank; // 秩数组public UnionFind(int n) {parent = new int[n + 1];rank = new int[n + 1];for (int i = 1; i <= n; i++) {parent[i] = i;rank[i] = 1; // 初始秩为1}
}public void union(int x, int y) {int rootX = find(x);int rootY = find(y);if (rootX == rootY) return;// 按秩合并:秩小的树合并到秩大的树下if (rank[rootX] < rank[rootY]) {parent[rootX] = rootY;} else {parent[rootY] = rootX;if (rank[rootX] == rank[rootY]) {rank[rootX]++; // 若秩相等,合并后根节点的秩+1}}
}

最终优化代码

public class UnionFind {private int[] parent;  // 父节点数组private int[] rank;    // 秩数组,用于按秩合并,避免树退化为链表/*** 初始化并查集* @param n 元素个数(编号从1到n)*/public UnionFind(int n) {parent = new int[n + 1];rank = new int[n + 1];for (int i = 1; i <= n; i++) {parent[i] = i;     // 初始时每个元素的父节点是自身rank[i] = 1;       // 初始时每个树的秩为1(高度或节点数)}}/*** 查找元素x所属集合的根节点(带路径压缩)* @param x 元素编号* @return 根节点编号*/public int find(int x) {if (parent[x] != x) {parent[x] = find(parent[x]);  // 路径压缩:将路径上的节点直接指向根}return parent[x];}/*** 合并两个集合* @param x 第一个元素* @param y 第二个元素*/public void union(int x, int y) {int rootX = find(x);  // 找到x的根节点int rootY = find(y);  // 找到y的根节点if (rootX == rootY) {return;  // 已在同一集合,无需合并}// 按秩合并:将秩较小的树合并到秩较大的树下,保持树的平衡if (rank[rootX] < rank[rootY]) {parent[rootX] = rootY;} else {parent[rootY] = rootX;if (rank[rootX] == rank[rootY]) {rank[rootX]++;  // 若秩相等,合并后根节点的秩+1}}}/*** 判断两个元素是否属于同一集合* @param x 第一个元素* @param y 第二个元素* @return true表示连通,false表示不连通*/public boolean isConnected(int x, int y) {return find(x) == find(y);}/*** 获取集合数量* @return 集合数量*/public int getSetCount() {int count = 0;for (int i = 1; i < parent.length; i++) {if (parent[i] == i) {count++;}}return count;}
}

http://www.dtcms.com/wzjs/489083.html

相关文章:

  • wordpress主题xiuseo免费优化软件
  • 网站在线支付接口十大最靠谱教育培训机构
  • 58同城一样的网站怎样建设杭州seo中心
  • 软件开发前端和后端站长工具seo综合查询问题
  • 手机做的兼职网站设计青岛seo优化
  • 住房城乡建设局是干什么的长春关键词优化报价
  • 网站漂浮物怎么做推广平台怎么找客源
  • 六安企业网站建设靠谱产品seo怎么优化
  • 呼和浩特网站建设小程序今日热点新闻事件摘抄2022
  • cloudflare做侵权网站长春做网站推荐选吉网传媒好
  • 网站开发的主要方法网站批量查询工具
  • 学计算机去哪个职业学校上海关键词优化排名哪家好
  • 做个网站怎么做西安seo排名扣费
  • 我们公司想做个网站我想做百度推广
  • 品牌网站建设服务流量主广告点击自助平台
  • 电子商务o2o是什么意思湖南seo技术培训
  • 数字展厅网站建设临沂seo顾问
  • 临沂网站制作案例百度广告推广怎么收费
  • 国土资源和建设部网站国外seo大神
  • 泾阳县住房和城乡建设局网站百度推广时间段在哪里设置
  • 百度指数网站产品如何推广市场
  • 免费视频素材网站都有哪些手机百度2020
  • phpcms对比wordpress泉州seo托管
  • 白云区江夏附近做网站网络营销企业网站
  • 重庆做seo排名软件
  • 无锡市网站设计怎么让百度收录
  • 扬州有什么做网站的公司站长工具服务器查询
  • 海南网站设计百度竞价开户流程
  • 两学一做 知识竞赛网站怎样在百度上发布自己的信息
  • 苏州建筑公司有哪些中国网络优化公司排名