带你理解MST性质
写在前面
最小生成树的引出
假设要在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性质的更多相关文章
- 一个故事带你理解if __name__ == '__main__'
如果你刚刚接触python,相信会在看别人的程序的时候会遇到if __name__ == '__main__'酱紫的语法,如果当时没看懂现在也一知半解的话,看下去,本文可以帮你解决这个问题. 大家都知 ...
- JDK1.8源码逐字逐句带你理解LinkedHashMap底层
注意 我希望看这篇的文章的小伙伴如果没有了解过HashMap那么可以先看看我这篇文章:http://blog.csdn.net/u012403290/article/details/65442646, ...
- [转帖]从零开始入门 K8s | 手把手带你理解 etcd
从零开始入门 K8s | 手把手带你理解 etcd https://zhuanlan.zhihu.com/p/96721097 导读:etcd 是用于共享配置和服务发现的分布式.一致性的 KV 存储系 ...
- 手摸手带你理解Vue的Computed原理
前言 computed 在 Vue 中是很常用的属性配置,它能够随着依赖属性的变化而变化,为我们带来很大便利.那么本文就来带大家全面理解 computed 的内部原理以及工作流程. 在这之前,希望你能 ...
- 手摸手带你理解Vue的Watch原理
前言 watch 是由用户定义的数据监听,当监听的属性发生改变就会触发回调,这项配置在业务中是很常用.在面试时,也是必问知识点,一般会用作和 computed 进行比较. 那么本文就来带大家从源码理解 ...
- 转: 带你玩转Visual Studio——带你理解多字节编码与Unicode码
上一篇文章带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑帮我们理解了Windows中的各种类型C/C++运行时库及它的来龙去脉,这是C++开发中特别容易误入歧途的 ...
- 手把手带你理解style
在写代码的时候,经常遇到自定义的style,有的用来设置属性,有的用来设置主题,搞的自己云里雾里,因此在心底暗暗发誓,等到空闲的时候,一定好好学学android中的style的究竟是个什么东西,到底有 ...
- 从底层带你理解Python中的一些内部机制
下面博文将带你创建一个字节码级别的追踪API以追踪Python的一些内部机制,比如类似YIELDVALUE.YIELDFROM操作码的实现,推式构造列表(List Comprehensions).生成 ...
- 带你玩转Visual Studio——带你理解多字节编码与Unicode码
目录(?)[-] 多字节字符与宽字节字符 char与wchar_t string与wstring string 与 wstring的相关转换 字符集Charcater Set与字符编码Encoding ...
随机推荐
- 用 openresty 编写 lua
""" #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/erro ...
- 鸿蒙内核源码分析(根文件系统) | 先挂到`/`上的文件系统 | 百篇博客分析OpenHarmony源码 | v66.01
百篇博客系列篇.本篇为: v66.xx 鸿蒙内核源码分析(根文件系统) | 先挂到/上的文件系统 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一 ...
- CF757F-Team Rocket Rises Again【最短路,DAG支配树】
正题 题目链接:https://www.luogu.com.cn/problem/CF757F 题目大意 \(n\)个点\(m\)条边的一张无向图,求删除\(s\)以外的一个点改变\(s\)到最多点的 ...
- 密码学系列之:1Password的加密基础PBKDF2
目录 简介 PBKDF2和PBKDF1 PBKDF2的工作流程 详解PBKDF2的key生成流程 HMAC密码碰撞 PBKDF2的缺点 总结 简介 1password是一个非常优秀的密码管理软件,有了 ...
- 分组密码(五)AES算法② — 密码学复习(八)
在上一篇简单复习了AES的历史时间节点.产生背景.与DES的对比.算法框图(粗略)以及一些数学基础,如果不记得的话点击这里回顾.下面将介绍AES算法的细节. 下面给出AES算法的流程,图片来源:密码算 ...
- html2canvas 无法渲染网络图片及本地 解决方案
使用html2canvas插件可以无法渲染图片的情况 在使用html2canvas的时候.如果元素中还包含网络图片.那么有很大的几率渲染不出来.即时把html2canvas的允许跨域打开也无济于事.这 ...
- 从零搭建基于webpack的Electron-Vue3项目(1)——基于webpack的Vue3项目搭建
从零搭建基于webpack的Electron-Vue3项目(1)--基于webpack的Vue3项目搭建 前言 本篇文章内容,主要是基于webpack的Vue3项目开发环境进行搭建,暂时还不涉及到El ...
- 洛谷3973 TJOI2015线性代数(最小割+思维)
感觉要做出来这个题,需要一定的线代芝士 首先,我们来观察这个柿子. 我们将\(B\)的权值看作是收益的话,\(C\)的权值就是花费. 根据矩阵乘法的原理,只有当\(a[i]和a[j]\)都为\(1\) ...
- 一个神秘的oj2587 你猜是不是dp(线段树优化建图)
哇 这难道不是happiness的翻版题嘛? 从\(S\)向一个点连染成白色的收益 从这个点向\(T\)连染成黑色的收益 对于额外的收益,建一个辅助点,跟区间内的每个点连\(inf\),然后向S/T, ...
- python3去除行号
问题:在复制一些代码时会同时复制每行的行号,删除比较麻烦,所以利用python3本身的代码进行一键删除. # 导入re 模块来使用正则表达式 import re """去 ...