写在前面

最小生成树的引出

假设要在n个城市之间建立通信联络网,则连通n个城市需要n-1条线路。在这种情况下,我们自然需要考虑一个问题,如何在最节省经费的条件下建立这个网络?

很自然地我们会想到,将各个城市之间的线路开销转化为权重,要想找到最节省经费的方案,就需要找到能够连通所有城市且权重最小的连通线路。

因此,我们需要选择一颗生成树,使得该生成树总耗费最小,也就是用最小的代价构建这条连通网。我们称这样的网络为:最小代价生成树(简称:最小生成树)

本文结构

本文从MST性质的定义和证明方面为读者解度最小生成树两个常见算法的前置理论性质。

普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法都是利用了MST性质的算法

建议读者在在理解了普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法之后再阅读此文

利用得到的最小生成树在回过头来理解MST会更加简单。

MST性质

MST性质的定义

假设N=(V,{E})是一个连通网,U是顶点集V的一个非空子集。

若(u,v)是一条既有最小权值(代价)的边,其中u∈U,v∈V,则必存在一颗包含边(u,v)的最小生成树。

证明

证明方法

可以用反证法证明。假设网N的任何一颗最小生成树都不包含(u,v)。设T是连通网上的一颗最小生成树,当将边(u,v)加入到T中时,由生成树的定义,T中必存在一条包含(u,v)的回路。

另一方面,由于T是生成树,则在T上必存在另外一条(u',v'),其中u'∈U,v'∈V-U,且u与u',v与v'均有路径相通。

删去边(u',v')即可消除上述回路,同时得到另外一颗生成树T'。因为(u,v)的代价不高于(u'v'),则T'的代价亦不高于T,T'是一颗包含(u,v)的最小生成树。与假设假设矛盾。

举个例子

现在,给出一个连通图:

众所周知,这样一给连通网的最小生成树为:

那么可以按照如下方式对MST进行证明:

带你理解MST性质的更多相关文章

  1. 一个故事带你理解if __name__ == '__main__'

    如果你刚刚接触python,相信会在看别人的程序的时候会遇到if __name__ == '__main__'酱紫的语法,如果当时没看懂现在也一知半解的话,看下去,本文可以帮你解决这个问题. 大家都知 ...

  2. JDK1.8源码逐字逐句带你理解LinkedHashMap底层

    注意 我希望看这篇的文章的小伙伴如果没有了解过HashMap那么可以先看看我这篇文章:http://blog.csdn.net/u012403290/article/details/65442646, ...

  3. [转帖]从零开始入门 K8s | 手把手带你理解 etcd

    从零开始入门 K8s | 手把手带你理解 etcd https://zhuanlan.zhihu.com/p/96721097 导读:etcd 是用于共享配置和服务发现的分布式.一致性的 KV 存储系 ...

  4. 手摸手带你理解Vue的Computed原理

    前言 computed 在 Vue 中是很常用的属性配置,它能够随着依赖属性的变化而变化,为我们带来很大便利.那么本文就来带大家全面理解 computed 的内部原理以及工作流程. 在这之前,希望你能 ...

  5. 手摸手带你理解Vue的Watch原理

    前言 watch 是由用户定义的数据监听,当监听的属性发生改变就会触发回调,这项配置在业务中是很常用.在面试时,也是必问知识点,一般会用作和 computed 进行比较. 那么本文就来带大家从源码理解 ...

  6. 转: 带你玩转Visual Studio——带你理解多字节编码与Unicode码

    上一篇文章带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑帮我们理解了Windows中的各种类型C/C++运行时库及它的来龙去脉,这是C++开发中特别容易误入歧途的 ...

  7. 手把手带你理解style

    在写代码的时候,经常遇到自定义的style,有的用来设置属性,有的用来设置主题,搞的自己云里雾里,因此在心底暗暗发誓,等到空闲的时候,一定好好学学android中的style的究竟是个什么东西,到底有 ...

  8. 从底层带你理解Python中的一些内部机制

    下面博文将带你创建一个字节码级别的追踪API以追踪Python的一些内部机制,比如类似YIELDVALUE.YIELDFROM操作码的实现,推式构造列表(List Comprehensions).生成 ...

  9. 带你玩转Visual Studio——带你理解多字节编码与Unicode码

    目录(?)[-] 多字节字符与宽字节字符 char与wchar_t string与wstring string 与 wstring的相关转换 字符集Charcater Set与字符编码Encoding ...

随机推荐

  1. python序列的修改、散列和切片

    新Vector类 接原vector类定义的新Vector类,原向量类是二维,现定义多维向量类: from array import array import reprlib import math c ...

  2. thinkphp5自带workerman应用

    1.在vendor/workerman/文件夹下建立server.php文件,内容如下: <?php use Workerman\Worker; require_once __DIR__ . ' ...

  3. 定要过python二级 选择第3套

    1 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. . 13. 14. 15. 16. 17. (1)说明了一个问题 所谓的方向是从左到右还是从右到左  是看的是步长  步长的 ...

  4. HTML 网页开发、CSS 基础语法——四. HTML基本语法

    1. HTML规范和HTML标签 W3C:world wide web consortium,万维网联盟.专门发布和维护互联网的规范和标准. 2. HTML标签 HTML 标记通常被称为 HTML 标 ...

  5. ❤️Python接口自动化,一文告诉你连接各大【数据库】建议收藏❤️

    @ 目录 前言 常见数据库 Mysql Oracle sql-server PostgreSQL MongoDB Redis 前言 相信很多小伙伴在使用python进行自动化测试的时候,都会涉及到数据 ...

  6. JVM 面试题,安排上了!!!

    肝了一篇非常硬核的 JVM 基础总结,写作不易,小伙伴们赶紧点赞.转发安排起来! 原文链接 据说看完这篇 JVM 要一小时 JVM 的主要作用是什么? JVM 就是 Java Virtual Mach ...

  7. Cobar提出的一种在分库场景下对Order By / Limit 的优化

    搜索关注微信公众号"捉虫大师",后端技术分享,架构设计.性能优化.源码阅读.问题排查.踩坑实践. 本文已收录 https://github.com/lkxiaolou/lkxiao ...

  8. CF536D Tavas in Kansas(博弈论+dp)

    貌似洛谷的题面是没有翻译的 QWQ 大致题面是这个样子,但是可能根据题目本身有不同的地方 完全懵逼的一个题(果然博弈论就是不一样) 首先,我们考虑把题目转化成一个可做的模型. 我们分别从\(s\)和\ ...

  9. CF613D Kingdom and its Cities(虚树+贪心)

    很休闲的一个题啊 其实一看到关于\(\sum k\)的限制,就知道是个虚树的题了 首先我们把虚树建出来,然后考虑怎么计算个数呢? 我们令\(f[x]\)表示以\(x\)的子树中,剩余了多少个还没有切断 ...

  10. SpringBoot-自动装配2

    配置文件到底能写什么?怎么写? SpringBoot官方文档中有大量的配置,直接去记忆的话,好像不是我们程序员的行事风格! 分析自动配置原理 能自动配置的组件一般都有命名为下面规则的两个类: xxxx ...