千家信息网

c++基于size和rank并查集优化是怎样的

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章将为大家详细讲解有关c++基于size和rank并查集优化是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。基于size的优化是指:当我们
千家信息网最后更新 2026年11月04日c++基于size和rank并查集优化是怎样的

这篇文章将为大家详细讲解有关c++基于size和rank并查集优化是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

基于size的优化是指:当我们在指定由谁连接谁的时候,size数组维护的是当前集合中元素的个数,让数据少的指向数据多的集合中

基于rank的优化是指:当我们在指定由谁连接谁的时候,rank数组维护的是当前集合中树的高度,让高度低的集合指向高度高的集合

运行时间是差不多的:

基于size的代码: UnionFind3.h

#ifndef UNION_FIND3_H_#define UNION_FIND3_H_#include#includenamespace UF3{class UnionFind{private:int* parent;int* sz; //sz[i]就表示以i为根的集合中元素的个数int count;public:UnionFind(int count){this->count = count;parent = new int[count]; sz = new int[count];for(int i = 0 ; i < count ; i++){parent[i] = i;sz[i] = 1;}}~UnionFind(){delete [] parent;delete [] sz;}int find(int p){assert(p < count && p >= 0); while( p != parent[p]) //这个是写到find里面的{p = parent[p];}return p;}void unionElements(int p , int q){int pRoot = find(p);int qRoot = find(q);if( pRoot == qRoot)return;if(sz[pRoot] < sz[qRoot]){parent[pRoot] = qRoot;sz[qRoot] += sz[pRoot];}else{parent[qRoot] = pRoot;sz[pRoot] += sz[qRoot];}}bool isConnected(int p , int q){return find(p) == find(q);}};};#endif

基于rank的代码: UnionFind4.h

#ifndef UNION_FIND4_H_#define UNION_FIND4_H_#include#includenamespace UF4{class UnionFind{private:int* parent;int* rank; //rank[i]就表示以i为根的集合的层数int count;public:UnionFind(int count){this->count = count;parent = new int[count]; rank = new int[count];for(int i = 0 ; i < count ; i++){parent[i] = i;rank[i] = 1;}}~UnionFind(){delete [] parent;delete [] rank;}int find(int p){assert(p < count && p >= 0); while( p != parent[p]) //这个是写到find里面的{p = parent[p];}return p;}void unionElements(int p , int q){int pRoot = find(p);int qRoot = find(q);if( pRoot == qRoot)return;if(rank[pRoot] < rank[qRoot]){parent[pRoot] = qRoot;}else if( rank[pRoot] > rank[qRoot] ){parent[qRoot] = pRoot;}else{parent[pRoot] = qRoot; //这里谁指向谁无所谓rank[qRoot] ++;}}bool isConnected(int p , int q){return find(p) == find(q);}};};#endif

关于c++基于size和rank并查集优化是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

指向 高度 c++ 个数 代码 元素 内容 数据 数组 文章 时候 更多 知识 篇文章 不错 差不多 无所谓 时间 质量 参考 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技创新与互联网经济 重庆互联网络科技 平安科技 互联网 青岛互联网科技公司 互联网科技公司有哪些 互联网科技生活的内容 成都仁贤领冠互联网科技有限公司 太原新华互联网科技学校怎么样 互联网实体化科技化 青岛中康互联网医疗科技有限公司 银川新华互联网科技职业技术培训学校图片 阿里互联网科技公司 互联网经济与金融科技 工业互联网科技创业 郑州欣桑互联网科技有限公司 互联网科技新闻 易租星互联网科技有限公司 深圳互联网科技园地址 互联网科技品牌 杭州科技互联网公司有哪些 蓝思科技飞鸽互联网 互联网和科技技术 互联网下的科技发展 互联网金融科技平台 语蝶互联网科技有限公司 用友工业互联网科技发展 华中科技大学互联网的牛人 广州富喜互联网络科技 萌小萌互联网科技河南有限公司 互联网 科技节活动 微视频大赛
0