最小生成树就是在一个无向连通图中,能够包含所有顶点且使得任两个顶点连通,并且包含的路径权值最小的生成树。经典算法是Prim算法和Kruskal算法,他们都是基于贪心算法的。

Prim算法的原理是从最小权值边开始,每次从上一个顶点集合的相邻边中找最短的权值边,再把新加入的顶点视作新集合。比如图例中先找到了最小边1,然后将V1V3点视为集合,寻找到其最短边4,以此类推。

 


Kruskal算法则孤立各个顶点,每次只选取其中的最短路径,使得每次不同连通分支的集合数量越来越少,最后集合数量只剩一个则完成生成树。其实现要比Prim算法复杂一点,关键在于

1.因为是选取最短路径,那么每次选取路径应当确认这条路径上的两个顶点是不是属于不同联通分支,只有当两个顶点属于不同连通分支才可选取该路径,否则同一连通分支的路径无法选择。

2.其次选中了该路径后应当将两个顶点所属的连通分支合并为一个连通分支。

这两个问题的解决方法分别用到了下列给出的集合运算Find(V),和Union(a,b)

 总结:Prim和Kruskal都是基于贪心算法的,虽然Kruskal相对Prim代码要多一些,但是由于Prim每趟需要遍历所有的边,而Kruskal只需每次选取最短边,因此一旦规模越大,Kruskal就越优于Prim算法。

贪心算法——最小生成树相关推荐

  1. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)

    题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...

  2. 贪心算法(Greedy Algorithm)最小生成树 克鲁斯卡尔算法(Kruskal#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)它既是古典最低的一个简单的了解生成树算法. 这充分反映了这一点贪心算法的精髓.该方法可以通常的图被表示.图选择这里借用Wikipedia在.非常 ...

  3. 并查集与贪心算法的应用之求解无向图的最小生成树

    一,介绍 本文介绍使用Kruskal算法求解无向图的最小生成树.Kruskal是一个贪心算法,并且使用了并查集这种数据结构. 关于并查集的介绍,参考:数据结构--并查集的原理及实现 二,构造一个无向图 ...

  4. NOJ1056地道——最小生成树+贪心算法

    地道 Time Limit(Common/Java):1000MS/3000MS          Memory Limit:65536KByte Total Submit:289          ...

  5. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  6. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  7. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  8. 使用贪心算法解决最小生成树问题。

    使用贪心算法解决最小生成树问题. #include<iostream> #include<algorithm> using namespace std; const int M ...

  9. prim算法_贪心算法详解(附例题)

    贪心算法的特征规律 贪心算法,"贪心"二字顾名思义,因此其规律特征就是更加注重当前的状态,贪心法做出的选择是对于当前所处状态的最优选择,它的解决问题的视角是微观的"局部& ...

最新文章

  1. modelandview为null的原因_如何在Java代码中去掉烦人的“!=null”
  2. Redis设计与实现笔记
  3. android圆形头像 demo,Android图像处理之绘制圆形头像
  4. 05NumPy--5.4矩阵
  5. Autolayout的简单介绍和示例代码
  6. numpy 维度与轴的问题
  7. 冬日暖阳!网易大数据应用与分析实践分享沙龙【北京站 12.16】
  8. macOS “不能安装该软件,因为当前无法从软件更新服务器获得” 解决方法
  9. [USB 设备检测_1]-使用 H2testw 1.4 或其她工具检测新买的朗科 U 盘读写速度及是否是扩容盘
  10. PNAS:植物香豆素塑造拟南芥合成根系微生物组的组成
  11. 计算机领域伟大成就,十五863计划信息技术领域重大科技工作成就
  12. 网易云音乐黑胶会员免费领取
  13. 国内首部创业纪实电影《燃点》进校园:如何靠近成功的2%...
  14. python在图片上画矩形
  15. 作业帮发布新品学习机,首创“AI老师一对一”模式
  16. 【03月13日】建筑材料行业的估值高度排名
  17. Chrome浏览器查看网页源代码的几种方法
  18. 霍尔电流传感器在UPS蓄电池浮充电流远程监测方案的应用
  19. 微信小黄鸡智能陪聊功能实现
  20. Daily Sentence(英语每日一句)

热门文章

  1. 自己借鉴别人总结的复习数学一大纲
  2. Elasticsearch介绍及安装
  3. c语言作用 英文版,C和指针(英文版)(C语言经典著作,强调指针对C语言的重要性,ACCU主席倾力推荐。)...
  4. jQuery的animate()的scrollTop属性在iPad Safari上不起作用
  5. HttpClient示例及资源释放
  6. linux ntfs 速度慢,将U盘转为NTFS格式解决U盘速度慢的问题
  7. 系统平台如何有效防止店铺降权
  8. 如何注册教育邮箱?如何注册邮箱地址?群发邮箱如何注册?
  9. androidUI布局仿猫扑界面
  10. idea log 不输出error_Python之log