3. 最小生成树算法

"图的基本概念"中,我们总结了无向图之连通图,有向图之强连通图概念,下面补充一些概念
  • 连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。
  • 生成树:一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的n-1条边。一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一条边,则必定成环。
  • 最小生成树:在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树。
最小生成树集合表示

在一给定的无向连通图G = (V, E)中,(u, v) 代表连接顶点 u 与顶点v 的边,w(u, v) 代表此边的权重;若存在 TE 的子集,G' = (V , T)构成的图为G的生成树,使得的 ∑w(T) 最小,则此 TG 的最小生成树。

最小生成树其实是最小权重生成树的简称。

大白话:

在n个城市中建立一个通信网络,则连通这n个城市需要布置n-1一条通信线路,考虑如何在成本最低的情况下建立这个通信网?
于是可以引入连通图来解决上述问题,n个城市就是图上的n个顶点,然后,边表示两个城市的通信线路,每条边上的权重就是搭建这条线路所需要的成本,所以现在有n个顶点的连通网可以建立不同的生成树,每一颗生成树都可以作为一个通信网,当我们构造这个连通网所花的成本最小时,搭建该连通网的生成树,就称为最小生成树。


连通图&最小生成树

构造最小生成树算法大多采用了以下性质:

G= (V,E)为一个带权连通无向图,U是顶点集V的一个非空子集,若(u,v)是一条具有最小权的边,其中u∈Uv∈V-U,则必存在一棵包含边(u,v)的最小生成树。


两种最常见的最小生成树算法 --- 求带权连通无向图G= (V,E)的最小生成树G'

1. Prim算法(普里姆算法)

算法过程: 带权连通无向图G= (V,E)

  1. 初始化 顶点集 V' = {u0}u0为图G中任一顶点,边集 E' = ∅
    V - V' = {... ...}E
  2. {(u , v)| u∈V',v∈V - V'}(u,v)∈E(u,v)权值最小,将 v 加入到V' 中,(u,v) 加到 E'
  3. 循环步骤2,直至 V' = V

图解:

Prime算法

图解过程描述:
首先从图G的任一顶点a开始,将a加入V'集合,然后,寻找从与a有关联的边中,权重最小的那条边并且该边的终点b在顶点集合:(V-V')中,我们也把b加入到集合V'中,并且输出边(a,b)的信息,这样我们的集合V'就有:{a,b},然后,我们寻找与a关联和b关联的边中,权重最小的那条边并且该边的终点在集合:(V-V')中,我们把c加入到集合V'中,并且输出对应的那条边的信息,这样我们的集合V就有:{a,b,c}这三个元素了,一次类推,直到所有顶点都加入到了集合V'。

总结:不断加点的过程,称之为 加点法
代码实现
Code





2. Kruskal算法(克鲁斯卡尔算法)

算法过程: 带权连通无向图G= (V,E),Kruskal是按权值递增顺序选择合适的边来构造最小生成树的方法

  1. 初始化 : V'=V , E'= ∅T此时是一个仅含有|V|个顶点的森林(即初始化的T图G将所有的边去掉构成的森林)
  2. 循环 :按图G的边的权值递增顺序,依次从 E-E' 中选择一条边加入到 T 中,保证这条边加入T 中不会构成回路,将这条边加入E'中,否则丢弃。循环,直到E'中含有一条n-1条边(即T构成为一棵树)

图解:仍以上图的连通网为例

Kruskal算法

图解过程描述:
(1)将图中的所有边都去掉(边集E'为空)。
(2)将边按权值从小到大的顺序添加到图中,保证添加的过程中不会形成环
(3)重复上一步直到连接所有顶点,此时就生成了最小生成树。这是一种贪心策略。

总结:不断加边的过程,称之为 加边法
代码实现
Code


关键字:

最小生成树
Prim算法
Kruskal算法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容

  • 一、定义 最小生成树(Minimum Spanning Tree,MST)仅针对加权连通无向图。对于一副加权连通无...
    null12阅读 2,387评论 0 0
  • 最小生成树算法有:Kruskal 算法和 Prim 算法。 首先明确关于图的几个概念: 连通图:在无向图中,若任意...
    顽强的猫尾草阅读 434评论 0 0
  • 最小生成树 给定一个无向图,如果它的某个子图中任意两个顶点都互相连通并且是一棵树,那么这棵树就叫做生成树。如果边上...
    周九九丶阅读 479评论 0 0
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 5,760评论 0 19
  • 距离姐姐的去世已经过去了一个月了。可是调查的结果却迟迟未曾公布,警方单方面只说不排除自杀的可能,关于作案动机还在进...
    左小丘丘故事机阅读 212评论 0 1