《算法导论》第23章-最小生成树 23.1-最小生成树的形成
一、最小生成树的形成
1、假定有一个连通无向图G=(V,E),和权重函数w:E->R,我们希望找到图G的一棵最小生成树。
2、管理一个边集合A:在每遍循环之前,A是某棵最小生成树的一个子集。在每一步,我们要做的事情是选择一条边(u, v), 将其加入到集合A中,使得A不违反循环不变式,即A∪{(u, v)}也是某棵最小生成树的子集。由于我们可以安全地将这种边加入到集合A而不会破坏A的循环不变式,因此称这样的边为集合A的安全边。
GENERIC-MST(G,w)
A=∅
while A does not form a spanning tree //当A不构成生成树的时候find an edge (u,v) that is safe for A //找到一条安全边A = A∪{(u,v)} //A更新
return A
3、一些定义:
无向图G=(V, E)的一个切割(S,V-S)是集合V的一个划分,如图23-2所示。如果一条边(u, v)∈E的一个端点位于集合S,另一个端点位于集合V-S,则称该条边横跨切割(S,V-S)。如果集合A中不存在横跨该切割的边,则称该切割尊重集合A。在横跨一个切割的所有边中,权重最小的边称为轻量级边。注意,轻量级边可能不是唯一的。一般,如果一条边是满足某个性质的所有边中权重最小的,则称该条边是满足给定性质的一条轻量级边。
4、辨认安全边的规则:
5、GENERIC-MST算法的第2~4行的while循环执行的总次数为|V|-1次,因为该循环的每遍循环都找出最小生成树所需|V|-1条边中的一条。在初始时,当A=x时,GA中有|Vl棵树,每遍循环将树的数量减少1棵。当整个森林仅包含一棵树时,该算法就终止。
6、
可以参考上面的图片理解。
《算法导论》第23章-最小生成树 23.1-最小生成树的形成相关推荐
- 算法导论第2章(3) 二分查找 binary search
二分查找(分治法). 二分查找也是一种分治法的实现,每一次查找将数据分为两个部分,问题规模都减小一半.这样查找的时间复杂度为logN.因为其实查找过程建立了一棵有N个节点的二叉树,查找次数是这棵树的高 ...
- 写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3)
写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3) TREE-PREDECESSOR(x)if x.left != NILreturn TREE-MAXIMUM(x.left) ...
- 位向量(bit vector)(算法导论第十一章11.1-2)
位向量(bit vector) 位向量(bit vector)是一个仅包含0和1的数组.长度为m的位向量所占空间要比包含m个指针的数组少得多.说明如何用一个位向量来表示一个包含不同元素(无卫星数据)的 ...
- 假设一动态集合S用一个长度为m的直接寻址表T来表示。请给出一个查找S中最大元素的过程。(算法导论第十一章11.1-1)
假设一动态集合S用一个长度为m的直接寻址表T来表示.请给出一个查找S中最大元素的过程.你所给的过程在最坏情况下的运行时间是多少. (算法导论第十一章11.1-1) #include "Key ...
- 算法导论 第7章 快速排序 —— 练习还没做,记得补锅
今天来学习第七章--快速排序. 作为占据一章的排序,快速排序可谓是重量级选手. 实际排序中最好的选择,因为 (1) 其平均性能非常好,期望实践复杂度为 O(n lgn); (2) 可进行原址排序; ( ...
- 重读《算法导论》第一章
重读<算法导论> --------算法是程序的灵魂! 驱动力:本人从事开发10年有余,目前正在参与研发自动化编程.在代码解析.自动生成.以及源码分析过程中总会遇到一些算法的问题. 所以想着 ...
- 算法导论第十三章 红黑树
写在前面:这一章真的把我害惨了,之前至少尝试看过3遍,每次看之前都下定决定一定要把它拿下,可是由于内容较多,深度够深,以致于每次要不是中途有什么事放弃了就跳过了,要不是花时间太多仍然不能理解而放弃.这 ...
- 算法导论 第20章 斐波那契堆
斐波那契堆的定义 参看19章 二项堆我们可以看到对于可合并堆操作,二项堆均有O(lgn)的时间,对于本章将要讨论的斐波那契堆也支持这些操作,而且它有着更好的渐进时间界,对于不涉及元素删除的操作,它有着 ...
- 算法导论第16章练习题 16.1-4
16.1-4 假设有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行.我们希望使用最少的教室来完成活动.设计一个高效的贪心算法,求每个活动应该在哪个教室来进行. (这个问题也被称为 ...
- 《算法导论3rd第一章》算法在计算中的作用
前言 什么是算法?为什么算法值得研究?算法的作用是什么 算法 算法就是任何良定义的计算过程,该过程取某个值或值的集合作为输入并产生某个值或值的集合做为输出.即就是把输入转换成输出的计算步骤的一个序列. ...
最新文章
- Angular应用提高打包速度
- 清华连续三年稳坐亚洲第一!西交利物浦成今年黑马 | 2021泰晤士亚洲大学排名...
- Sql语句查询 显示序号
- 字典转json时排序
- Spring5源码 - 09 循环依赖解读
- 模型参数优化(二):粒子群优化
- Python3报错:TypeError: unsupported operand type(s) for +: ‘int‘ and ‘str‘
- Java synchronized的CPU层面实现细节
- JENKINS使用DOCKER运行PYTEST并且出ALLURE报告
- 七种武器——.NET工程师求职面试必杀技(转)
- 《Effective Python 2nd》——元类与属性
- 42. HTTP Cookie
- 删除亚马逊Kindle电子书的DRM,将AZW转为PDF格式文档
- 关于NMDS的一知半解
- 游戏原画,掌握角色设计2个小技巧,你也能画好角色
- 问题 K: 蜗牛1534
- 十年之痛解读日本房地产泡沫
- [AP]无线AP和无线路由的区别
- jiedai算法模板合集(正在肝2021.8.15)
- [青少年][scratch]自制积木块讲解