第三种最小生成树算法 Borůvka算法
第三种最小生成树算法 Borůvka算法
基本思路:
用定点数组记录每个子树的最近邻居。
对于每一条边进行处理:
如果这条边连成的两个顶点同属于一个集合,则不处理,否则检测这条边连接的两个子树,如果是连接这两个子树的最小边,则更新 (合并)。
作用:
那么中算法有什么用呢,Kruskal,prim算法不好吗?它们好是好,但在某些题目里面可能用第三种算法更加优。对于那些点数n是1e5级别,边数m却是n2n^2n2级别的图,但每个点的最小边能很快算出来的题,求最小生成树我们不可能存得下边。这时候Borůvka算法用处就体现了,因为它的空间复杂度只跟点数有关。
代码:
struct node {int x, y, w; } edge[M];
int d[N]; // 各子树的最小连外边的权值
int e[N]; // 各子树的最小连外边的索引
bool v[M]; // 防止边重复统计int fa[N];
int find(int x) {return x==fa[x] ? x : (fa[x]=find(fa[x])); }
void join(int x, int y) {fa[find(x)]=find(y); }int Boruvka() {int tot=0;for (int i=1; i<=n; ++i) fa[i]=i;while (true) {int cur=0;for (int i=1; i<=n; ++i) d[i]=inf;for (int i=1; i<=m; ++i) {int a=find(edge[i].x), b=find(edge[i].y), c=edge[i].w;if (a==b) continue;cur++;if (c<d[a] || c==d[a] && i<e[a]) d[a]=c, e[a]=i;if (c<d[b] || c==d[b] && i<e[b]) d[b]=c, e[b]=i;}if (cur==0) break;for (int i=1; i<=n; ++i) if (d[i]!=inf && !v[e[i]]) {join(edge[e[i]].x, edge[e[i]].y), tot+=edge[e[i]].w;v[e[i]]=true;}}return tot;
}
参考:
https://www.cnblogs.com/greyqz/p/9536352.html
第三种最小生成树算法 Borůvka算法相关推荐
- Codeforces.888G.Xor-MST(Borůvka算法求MST 贪心 Trie)
题目链接 \(Description\) 有一张\(n\)个点的完全图,每个点的权值为\(a_i\),两个点之间的边权为\(a_i\ xor\ a_j\).求该图的最小生成树. \(n\leq2*10 ...
- 三种最小生成树算法的简要比较:Kruskal算法, 破圈法(管梅谷), Prim算法
本文针对之前常常弄混Kruskal算法, 破圈法(管梅谷), Prim算法这三种算法的问题,仅仅简单地总结Kruskal算法, 破圈法(管梅谷), Prim算法在求最小生成树时的思路的区别. 如果目的 ...
- 三种强大的物体识别算法——SIFT/SURF、haar特征、广义hough变换的特性对比分析
识别算法概述: SIFT/SURF基于灰度图, 一.首先建立图像金字塔,形成三维的图像空间,通过Hessian矩阵获取每一层的局部极大值,然后进行在极值点周围26个点进行NMS,从而得到粗略的特征点, ...
- 算法:三种简单排序算法
排序算法比較常见的有:冒泡排序.简单选择排序.直接插入排序:希尔排序.堆排序.归并排序和高速排序算法等. 今天先学习一下前面三种比較简单的算法.排序的相关概念: ①排序的稳定性:两个或多个元素相等.排 ...
- pca算法python实现_三种方法实现PCA算法(Python)
主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...
- 【python 以图搜图】三种图片相似度计算融合算法
目标:在一个文件夹找出相似度较高的图片,达到以图搜图的目的. 我找了十组,都是高度相似的图片. 核心算法: 1.分别自定义三种计算图片相似度算法,计算图片相似度算法ORB算法,以及局部敏感哈希phas ...
- 三种不同的文本图像背景漂白/纯化/去除算法
本篇博文来自博主Imageshop,打赏或想要查阅更多内容可以移步至Imageshop. 转载自:https://www.cnblogs.com/Imageshop/p/14617355.html ...
- python中pca算法_Python使用三种方法实现PCA算法
主成分分析(PCA) vs 多元判别式分析(MDA) PCA和MDA都是线性变换的方法,二者关系密切.在PCA中,我们寻找数据集中最大化方差的成分,在MDA中,我们对类间最大散布的方向更感兴趣. 一句 ...
- pca算法python代码_三种方法实现PCA算法(Python)
主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...
- 连通域最小外接矩形算法原理_算法|图论 2W字知识点整理(超全面)
作者:SovietPower✨ 链接:https://ac.nowcoder.com/discuss/186584 来源:牛客网 度数序列 对于无向图, 为每个点的度数.有 (每条边被计算两次).有偶 ...
最新文章
- [ 一起学React系列 -- 10 ] i18n
- CCNP-19 IS-IS试验2(BSCI)
- 在CentOS上搭建PHP服务器环境
- OOD知识---对OOA\OOD\OOP思想
- 循环结果添加到集合_Java Note-数据结构(4)集合
- TME上市两周年|为2020甜蜜发糖,收获2021的希望
- c++interesting转换为uint_巴西插头标准,旅行转换插头是怎样的?
- winform DataGridView的虚模式填充,CellValueNeeded事件的触发条件
- 1.Kubernetes 简介
- 诸葛io的技术架构图_阿里P8总结三面四轮技术面试:Tomcat+Redis+线程池锁+悲观锁+NIO...
- 【ACC编码】基于FPGA的音频ACC编码实现
- VSDX Annotator for mac(Visio 绘图工具)
- 华为 eNSP模拟器安装教程
- 视频教程-C++Windows之WDM驱动程序开发(实战篇)上-驱动/内核开发
- 怎么看计算机内存和独显,怎么看电脑是集成显卡还是独立显卡
- 电子商务复习笔记三:网络营销
- 使用python来完成数据的线性拟合
- linux raid5 性能,RAID级别及各个级别特性
- pymysql获取要查询的字段名(列名)
- 在家做什么挣钱,50个赚钱的热门项目分享