最小生成树——Kruskal与Prim算法

序:

首先:

啥是最小生成树???

咳咳。。。

如图:

在一个有n个点的无向连通图中,选取n-1条边使得这个图变成一棵树。这就叫“生成树”。(如下图)

每个无向连通图都会拥有至少一个生成树。

而在无向连通图中,我们让每一个边都拥有一个边权(就是每个边代表一个值)。

而我们在有边权的无向连通图中构造一个生成树,使得这个生成树所用的边的边权之和最小。这个生成树就叫这个无向连通图的最小生成树!

上图这个最小生成树的边权之和为9,是所有生成树中边权之和最小的。


Kruskal算法

(Kruskal算法适合稀疏图)

仍旧是那个无向连通图。。。

在这个图中有9个边。将这9条边按边权大小从小到大排序。紧接着将排好序的边挨个加入生成树中。没加入一条边便判断一下生成树是否有环。如果有,则将这条边移出生成树,换下一条边重新操作。

看不懂的看下面的示例:

首先选择边权最小的边加入生成树。(多个相等的边权则任意选择一个)

重复之前的操作。

此时我再选择一条边加入生成树。

大家注意下图下面红色部分!!!

在加入一条边后生成树已经出现了一个环!!!

所以我们要退回之前。

此时选择另外一条边。

此时并没有出现任何环。所以进行下一步。

我们发现这时的最小生成树刚好有n-1条边(一共n个点)。此时我们的最小生成树已经找完了。


Prim算法

(Prim算法适合稠密图)

那个无向连通图又来了。。。

(因为某些不可描述的原因,作者把图改了一下。。。)

在此图中随便选择一个点加入生成树,然后选取所有可以取到的边(就是和生成树中的点连接的边)中边权最小的边加入生成树中,判断是否有环,然后重复此步骤。

看不懂的继续看例子啊

首先任意选取一个点。(例子选的是v1)

然后选取一个边权最小的边,并把点加入生成树。

紧接着重复此步骤。

此时已经构成一棵最小生成树了。(PS:作者提示——作者没有做出现环的样例,请各位读者注意)


结束语:

本人第一篇博客。

有问题请指出,谢谢!

最小生成树——Kruskal与Prim算法的更多相关文章

  1. 关于最小生成树 Kruskal 和 Prim 的简述(图论)

    模版题为[poj 1287]Networking. 题意我就不说了,我就想简单讲一下Kruskal和Prim算法.卡Kruskal的题似乎几乎为0.(●-`o´-)ノ 假设有一个N个点的连通图,有M条 ...

  2. Kruskal和Prim算法求最小生成树

    Kruskal算法求最小生成树 测试数据: 5 6 0 1 5 0 2 3 1 2 4 2 4 2 2 3 1 1 4 1 输出: 2 3 1 1 4 1 2 4 2 0 2 3 思路:在保证不产生回 ...

  3. 最小生成树(Kruskal和Prim算法)

    关于图的几个概念定义:          关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vi与vj都有路 ...

  4. 最小生成树的kruskal、prim算法

    kruskal算法和prim算法 都说 kruskal是加边法,prim是加点法 这篇解释也不错:这篇 1.kruskal算法 因为是加边法,所以这个方法比较合适稀疏图.要码这个需要先懂并查集.因为我 ...

  5. 1.1.2最小生成树(Kruskal和Prim算法)

    部分内容摘自 勿在浮沙筑高台 http://blog.csdn.net/luoshixian099/article/details/51908175 关于图的几个概念定义: 连通图:在无向图中,若任意 ...

  6. 算法导论--最小生成树(Kruskal和Prim算法)

    转载出处:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51908175 关于图的几个概念定义: 连通图:在无向图中,若任意两个顶 ...

  7. 数据结构与算法--最小生成树之Prim算法

    数据结构与算法--最小生成树之Prim算法 加权图是一种为每条边关联一个权值或称为成本的图模型.所谓生成树,是某图的一棵含有全部n个顶点的无环连通子图,它有n - 1条边.最小生成树(MST)是加权图 ...

  8. [讲解]prim算法<最小生成树>

    最小生成树的方法一般比较常用的就是kruskal和prim算法 一个是按边从小到大加,一个是按点从小到大加,两个方法都是比较常用的,都不是很难... kruskal算法在本文里我就不讲了,本文的重点是 ...

  9. hiho 1097 最小生成树一·Prim算法 (最小生成树)

    题目: 时间限制:10000ms 单点时限:1000ms 内存限制:256MB   描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城市了! 但是,问 ...

随机推荐

  1. [考试反思]1015csp-s模拟测试74:压迫

    其实同时也是第27,一大片并列的. 真的是越考越烂. T1是个弱化的贪心原题,15分钟拿下没什么可说的. T2打的记忆化搜索,hash_mod太小撞哈希了,50->30 T3,想不到正解,90分 ...

  2. Spring Boot2 系列教程(二十一)整合 MyBatis

    前面两篇文章和读者聊了 Spring Boot 中最简单的数据持久化方案 JdbcTemplate,JdbcTemplate 虽然简单,但是用的并不多,因为它没有 MyBatis 方便,在 Sprin ...

  3. 【gradle使用前篇—Groovy简介】

    Groovy介绍 Groovy是一种动态语言,对它的定义是:Groovy是在java平台上的,具有像Python.Ruby和smalltalk语言特性的灵活动态语言,Groovy保证了这些特性像jav ...

  4. sqlite修改表、表字段等与sql server的不同之处

    sqlite中只支持 ALTER TABLE 命令的 RENAME TABLE 和 ADD COLUMN. 其他类型的 ALTER TABLE 操作如 DROP COLUMN,ALTER COLUMN ...

  5. F#周报2019年第46期

    新闻 使用Pulumi和.NET Core创建现代云应用 宣告.NET Core 3.1预览版3 ML.NET模型构建器升级 .NET Framework修复工具 Mac上的Visual Studio ...

  6. 012.Kubernetes二进制部署worker节点Flannel

    一 部署flannel 1.1 安装flannel kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通.flannel 使用 vxlan 技术为各节点创建一 ...

  7. containerd 与安全沙箱的 Kubernetes 初体验

    作者 | 易立  阿里云资深技术专家 containerd 是一个开源的行业标准容器运行时,关注于简单.稳定和可移植,同时支持 Linux 和 Windows. 2016 年 12 月 14 日,Do ...

  8. java笔试面试第二天

    没想到第二次面试到了第二周,也是我在上海找工作的第二周,说实话,没有真本事找工作是真的难,虽然正在召开的十九大上,大大们纷纷表态国力正盛,经济稳步增长,就业压力逐渐缓解,但是社会终究是社会,要么靠实力 ...

  9. PHP中高级面试题 一个高频面试题:怎么保证缓存与数据库的双写一致性?

    分布式缓存是现在很多分布式应用中必不可少的组件,但是用到了分布式缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? Cache Aside ...

  10. package.json文件内容介绍

    概述 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据).npm install命令根据这个配置文件, ...