最小生成树

参见贪心算法——最小生成树算法

目录

  • 1 最小生成树问题
  • 2 贪心选择性质
    2.1 贪心选择框架——选择安全边
    2.2 安全边的辨认规则
  • 3 最优子结构
  • 4 Kruskal算法
  • 5 Prim算法

1 最小生成树问题

2 贪心选择性质

2.1 贪心选择框架——选择安全边

贪心策略:



该算法的理解:

  • a.集合A总保持无环状态,因为是一棵树;因此对于集合A为安全的边(u, v)所连接的是GA中不同的连通分量;因此,每执行一次循环,减少一棵树
  • b.算法执行的任意时刻,图GA = (V, A)是一个森林,GA中的每个连通分量是一棵树
    算法开始时,集合A为空,森林中包含|V|棵树,每棵树只有一个节点;
  • c.由a, b可知,while循环总共执行|V| - 1次,当整个森林仅包含一棵树时,终止

循环不变式:
在每次循环之前,A是某棵最小生成树的一个子集。

安全边:满足如下条件的边称之为安全边。
将边(u, v)加入到集合A中,使得A不违反循环不变式,即AU{(u, v)}也是某棵最小生成树的子集。

2.2 安全边的辨认规则


切割:无向图G=(V, E)的一个切割(S, V-S)是集合V的一个划分
横跨:边(u, v)横跨切割(S, V-S)表示一个端点在集合S,一个在V-S
尊重:如果集合A中不存在横跨该切割的边,则称该切割尊重集合A
轻量级边:在横跨一个切割的所有边中,权重最小的边称为轻量级边

  • 特别注意:之前将切割和尊重误解了。切割,可以将A分为不相连通的两部分,而不是将A放到一边。

贪心策略中辨认安全边的规则:


一个推论:


一个问题:为什么该切割尊重集合A

  • 根据定义:因为集合A中不存在横跨该切割的边
    该切割区分了C,将集合A分为两部分,C和A-C,但是C和A-C并不连通。
    所以不存在横跨该切割的一条轻量级边。

3 最优子结构

如果一个问题的最优解中包含了子问题的最优解,则该问题具有最优子结构。
最小生成树是满足最优子结构的,下面会给出证明:
最优子结构描述:假设我们已经得到了一个图的最小生成树(MST) T,(u, v)是这棵树中的任意一条边。如图所示:


现在我们把这条边移除,就得到了两棵子树T1和T2,
如图:

  • T1是图G1=(V1, E1)的最小生成树,G1是由T1的顶点导出的图G的子图,E1={(x, y)∈E, x, y ∈V1}
    同理可得T2是图G2=(V2, E2)的最小生成树,G2是由T2的顶点导出的图G的子图,E2={(x, y)∈E, x, y ∈V2}
    现在我们来证明上述结论:使用剪贴法。w(T)表示T树的权值和。
    首先权值关系满足:w(T) = w(u, v)+w(T1)+w(T2)
    假设存在一棵树T1'比T1更适合图G1,那么就存在T'={(u,v)}UT1'UT2',那么T'就会比T更适合图G,这与T是最优解相矛盾。得证。
  • 特别注意,上图中(u, v)这条边是连接两棵树的最小边(安全边)

4 Kruskal算法

  • 集合A是一个森林,每次加入到集合A中的安全边永远是权重最小的连接两个不同分量的边。

  • 运行时间分析
    集合使用不相交集(并查集)实现,参见基本数据结构ADT及其实现
    排序:O(ElgE)
    O(E)个FIND-SET和UNION操作,|V|个MAKE=SET操作:O((V+E)α(V))
    若G是连通的|E| ≥|V| -1,因此总时间为O(ElgE),|E| < |V|²,则有O(ElgV)。

5 Prim算法——广度优先搜索

  • 集合A是一棵树,每次加入到A中的安全边永远是连接A和A之外某个节点的边中权重最小的边。
  • 广度优先搜索的思想——当从Q中取出一个点u时,即要检查u的所有相邻的点,并更新相关的点。
  • Prim算法与分支限界法类似,利用广度优先搜索和优先队列思想,只不过是没有使用分支限界思想。因为可以证明贪心选择性质,使之可以组成一个最优解。
  • 该算法的一个简要分析:
    初始化:r.key = 0,其余节点u.key = 无穷大;
    第一次循环:将r从Q中剔除,并更新r的所有邻节点的key
    以此类推;
    所有不在树A中的结点都存放在一个基于key属性的最小优先队列Q中。对于每个结点v,属性v.key保存的是连接v和树中结点的所有边中最小边的权重。
  • 循环不变式:
    1)A = {(v, v.π): v∈V-{r}-Q}
    2)已经加入到最小生成树的结点集合为V-Q
    3)对于所有的结点v∈Q,如果v.π≠NIL,则v.key < ∞并且v.key是连接结点v和最小生成树中某个结点的轻量级边(v, v.π)的权重
  • 正确性:找出结点u∈Q,该结点是某条横跨切割(V-Q, Q)的轻量级边(u.π, u)的一个端点(第一次循环除外)。接着将u从队列Q中删除,并将其加入到集合V-Q中,也即将(u.π, u)加入到集合A中。
  • 运行时间分析
    1)如果用二叉堆
    建堆:O(V)
    EXTRACT-MIN:O(VlgV)
    判断结点是否属于Q:O(E),利用一个标志位来指明结点是否属于Q(O(1)即可判断)
    DECREASE-KEY:O(ElgV)
    总时间为O(ElgV)
    2)如果用斐波那契堆
    DECREASE-KEY:O(E)
    总时间为O(E+VlgV)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容