[算法系列之二十七]Kruskal最小生成树算法
简单介绍
求最小生成树一共同拥有两种算法,一个是就是本文所说的Kruskal算法,还有一个就是Prime算法。
在具体解说Kruskal最小生成树算法之前,让我们先回想一下什么是最小生成树。
我们有一个带权值的图,我们要求找到一个全部生成树中具有最小权值的生成树。例如以下图所看到的,T是图G的生成树。但不是具有最小权值的生成树。
我们能够把他们想象成一组岛屿和连接它们的可能的桥梁。当然修桥是非常昂贵和费时的,所以我们必需要知道建设什么样的桥梁去连接各个岛。只是有一个重要的问题。建设这样一组连接全部岛屿的桥梁的最低价格是多少。
我们实际上需要构建一棵最小生成树,顶点表示岛屿,而边表示它们之间可能要修建的桥梁。每个可能修建的桥梁都有对应的权值(表示我们建造它所花费的时间和金钱等)。
在实践中。我们仅仅可能使用一个最小生成树的可能用例。(This scenario is only one of possible use cases of where minimum spanning trees can be used in practice.)
概要
Kruskal算法開始由初始化一组集合,并建立| V|棵树,每棵树都仅仅包括了图的一个顶点。
在建设最后生成树的过程中。我们维护一个森林。非常显然。我们由|V|棵树组成的森林開始,当中每个树都仅仅有是一个节点。
在某些时候,我们有“K”棵树组成的森林,这几棵树都最小生成树的子树。
构建终于的最小生成树最后一个步骤之前,我们有两个树(如上图的3),我们用剩下的最小权值边来连接这两棵树。
构建树的过程中,我们依照权值的升序,对边进行排序。
然后。获取边,检查每条边(u,v),其端点u和v是否是属于同一棵树。假设是。把(u,v)增加森林中就会形成一个回路,所以放弃这条边(u。v)。否则。说明两个顶点分属不同的树。
关于Kruskal算法一个非常大的特点是,它也能够用在非连同图中。
原文
[算法系列之二十七]Kruskal最小生成树算法的更多相关文章
- Kruskal 最小生成树算法
对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...
- 雷达无线电系列(二)经典CFAR算法图文解析与实现(matlab)
一,CFAR基础知识介绍 简介 恒虚警检测技术是指雷达系统在保持虚警概率恒定条件下对接收机输出的信号与噪声作判别以确定目标信号是否存在的技术. 前提 由于接收机输出端中肯定存有噪声(包括大气噪声.人为 ...
- 机器学习(二十七)— EM算法
1.EM算法要解决的问题 如果使用基于最大似然估计的模型,模型中存在隐变量,就要用EM算法做参数估计. EM算法解决这个的思路是使用启发式的迭代方法,既然我们无法直接求出模型分布参数,那么我们可以先猜 ...
- 字符串模式匹配算法系列(二):KMP算法
算法背景: KMP算法是由Donald Knuth和Vaughan Pratt于1970年共同提出的,而James H.Morris也几乎同时间独立提出了这个算法.因此人们将其称作“克努特-莫里斯-普 ...
- 并查集和kruskal最小生成树算法
并查集 先定义 int f[10100];//定义祖先 之后初始化 for(int i=1;i<=n;++i) f[i]=i; //初始化 下面为并查集操作 int find(int x)//i ...
- C#数据结构与算法系列(二十三):归并排序算法(MergeSort)
1.介绍 归并排序(MergeSort)是利用归并的思想实现的排序方法,该算法采用经典的分治策略(分治法将问题分(divide)成一些小的问题然后递归求解, 而治(conquer)的阶段则将分的阶段得 ...
- C#数据结构与算法系列(二十):插入排序算法(InsertSort)
1.介绍 插入排序算法属于内部排序算法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的 2.思想 插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看 ...
- C#数据结构与算法系列(二十一):希尔排序算法(ShellSort)
1.介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 2.基本思想 希尔排 ...
- [算法] kruskal最小生成树算法
#include <stdio.h> #include <stdlib.h> #define MAX 100 int N, M; struct Edge { int u,v; ...
随机推荐
- POJ 2437 贪心+priority_queue
题意: 思路: 贪心 能不覆盖的就不盖 写得很乱 左闭右开的 temp //By SiriusRen #include <queue> #include <cstdio> #i ...
- 10款最好的Python IDE
Python 的学习过程少不了集成开发环境(IDE)或者代码编辑器.这些 Python 开发工具帮助开发者加快使用 Python 开发的速度,提高效率.高效的代码编辑器或者 IDE 应该会提供插件,工 ...
- 2018 java实训总结(时间戳&&主键)
java实训题目:源管理系统. 答辩的时候被老师怼了以下几个的地方: 1.主键改变了 2.没时间戳却说自己的程序里有先后(这就是老师迂腐了,主键自增可以间接反馈出他加入的早晚,即使主键做出了改变但只是 ...
- 获取Spring容器中Bean实例的工具类(Java泛型方法实现)
在使用Spring做IoC容器的时候,有的类不方便直接注入bean,需要手动获得一个类型的bean. 因此,实现一个获得bean实例的工具类,就很有必要. 以前,写了一个根据bean的名称和类型获取b ...
- 牛客网剑指offer刷题总结
二维数组中的查找: 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 两 ...
- 杭电(hdu)2053 Switch Game 水题
Switch Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- mysql 压力测试之批量插入自增字段不连续问题
Gaps in auto-increment values for “bulk inserts” With innodb_autoinc_lock_mode set to 0 (“traditiona ...
- Redux简易理解
1. createStore(相当于vuex的$store) 这才是数据存储仓库,用来存储初和输出的数据,更vuex$store功能一样 作用: 创建一个 Redux store 来以存放应用中所有 ...
- 自绘listCtrl控件选中该行高亮(模拟windows)
CListCtrl的派生类CMyListCtrl的DrawItem()函数里添加代码 CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC); if ...
- 【Good Bye 2017 B】 New Year and Buggy Bot
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举一下全排列.看看有多少种可以到达终点即可. [代码] #include <bits/stdc++.h> using ...