本次笔记内容:
8.1.1 Prim算法
8.1.2 Kruskal算法

文章目录

  • 最小生成树问题
    • 什么是最小生成树(Minimum Spanning Tree)
    • 贪心算法
  • Prim算法
  • Kruskal算法

最小生成树问题

什么是最小生成树(Minimum Spanning Tree)

是一棵树:

  • 没有回路;
  • |V|个顶点一定有|V|-1条边。

是生成树:

  • 包含全部顶点;
  • |V|-1条边都在图里。

边的权重和最小。

如上图,向最小生成树里加一条边都一定能构成回路。并且“最小生成树存在”和“图连通”是充分必要条件。

贪心算法

“贪”:每一步都是最好的;
“好”:权重最小的边。
约束:

  • 只能用图里有的边;
  • 只能正好用掉|V|-1条边;
  • 不能有回路。

Prim算法

让一棵小树长大。类似Dijkstra算法。

void Prim()
{MST = {s};while (1){V = 未收录顶点中dist最小者;if (这样的V不存在)break;将V收录进MST;for (V的每个邻接点W)if (W未被收录)if (E(V, W) < dist[W]){dist[W] = E(V, W);parent[W] = V;}}if (MST中收的顶点不到 | V | 个)Error("生成树不存在");
}

其中,dist[V]=E(s,V)或正无穷;
为了巧妙存储树,用parent定义树(节点的父节点),其中根节点parents[s]=-1。

Prim的时间复杂度是O(N2)O(N^2)O(N2),适于稠密图。

Kruskal算法

将森林合并成树。

对边遍历:初始时,将每个节点都视为一棵树。逐渐地,将各树连接起来。

void Kruskal(Graph G)
{MST = {};while (MST中不到 | V | -1条边 && E中还有边){从E中取一条权重最小的边E(V, W); // 使用最小堆将E(V, W)从E中删除; if (E(V, W) 不在MST中构成回路) //并查集将E(V, W) 加入MST;else 彻底无视E(V, W);}if (MST中不到 | V | -1条边)Error("生成树不存在");
}

时间复杂度为O(E×log⁡2(E))O(E \times \log_2(E))O(E×log2​(E)),适于V的数量约等于E的稀疏图。

【数据结构笔记29】最小生成树问题:Prim算法与Kruskal算法相关推荐

  1. 【数据结构】最小生成树问题(Prim算法和Kruskal算法)

    相关概念 连通图与它的生成树 连通图的生成树是包含图中全部顶点的一个极小连通子图.若图的顶点数为n,则它的生成树含有n-1条边.一个连通图可能拥有多个生成树. 最小生成树(Minimum-Spanni ...

  2. 【Java数据结构与算法】第十九章 贪心算法、Prim算法和Kruskal算法

    第十九章 贪心算法.Prim算法和Kruskal算法 文章目录 第十九章 贪心算法.Prim算法和Kruskal算法 一.贪心算法 1.介绍 2.支付问题 二.Prim算法 1.最小生成树 2.介绍 ...

  3. 数据结构与算法—最小生成树(Prim算法和Kruskal算法算法详解)

    前言 在数据结构与算法的图论中,(生成)最小生成树算法是一种常用并且和生活贴切比较近的一种算法.但是可能很多人对概念不是很清楚.我们看下百度百科对于最小生成树定义: 一个有 n 个结点的连通图的生成树 ...

  4. 加权无向图与最小生成树(Prim算法和Kruskal算法)

    目录 0 引入 1 图的最小生成树定义及相关约定 2 最小生成树原理 2.1 性质 2.2 切分定理 3 贪心思想 4 Prim算法 4.1 算法步骤 4.2 API设计 4.3 Java代码演示 5 ...

  5. 求的带权图最小生成树的Prim算法和Kruskal算法

    求的带权图最小生成树的Prim算法和Kruskal算法 最小生成树的概念 最小生成树其实是最小权重生成树的简称. 一个连通图可能有多个生成树.当图中的边具有权值时,总会有一个生成树的边的权值之和小于或 ...

  6. prim算法_求解最优树——Prim算法与Kruskal算法

    本文主要参考: 1.<Matlab数学建模算法全收录(数学建模比赛必备参考资料).pdf> 2.最小生成树-Prim算法和Kruskal算法 1 前言 简单来说,图由顶(就是结点)和边构成 ...

  7. 最小生成树之Prim算法和Kruskal算法

    一个连通图可能有多棵生成树,而最小生成树是一副连通加权无向图中一颗权值最小的生成树,它可以根据Prim算法和Kruskal算法得出,这两个算法分别从点和边的角度来解决. Prim算法 输入:一个加权连 ...

  8. C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)

    1.Prim 算法 以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 2.Kruskal 算法 直接寻找最小权值的边来构建最小生成树. 比较: Kruskal 算法主要是针对边来展开,边数 ...

  9. Prim算法和Kruskal算法

       Prim算法和Kruskal算法都能从连通图找出最小生成树.区别在于Prim算法是以某个顶点出发挨个找,而Kruskal是先排序边,每次选出最短距离的边再找. 一.Prim(普里姆算法)算法: ...

  10. matlab实现prim算法,Prim算法和Kruskal算法的Matlab实现

    Prim算法和Kruskal算法的Matlab实现 <计算机仿真>期末大作业 Prim算法和Kruskal算法的Matlab实现 05605刘禹050697(30) 连线问题应用举例: 欲 ...

最新文章

  1. 《繁凡的深度学习笔记》前言、目录大纲 一文让你完全弄懂深度学习所有基础(DL笔记整理系列)
  2. Java反射机制实例解析
  3. windows下使用开源gSOAP技术调用WebService
  4. Windows下MySQL压缩包.zip的安装
  5. 使用py2neo构建neo4j图模型小demo
  6. 创建模板_在 GNOME 中创建文档模板 | Linux 中国
  7. 2019PKU\THU WC题解
  8. jQuery第一个孩子“这个”
  9. 从本地或网页加载图片
  10. 歌曲只需要伴奏,怎么消去歌声?
  11. 求最长公共子串,简单易懂
  12. 【ionic框架bug】slidebox在使用model或popover后width变为0的解决方案
  13. linux学习shell基础
  14. 三菱M80操作介绍_CIMT2019 展品预览:三菱电机以“智能制造 价值创造”为主题参展...
  15. Midjourney之外21款免费的AI Image画图网站集合
  16. 微信小程序开发一定要服务器么,该怎么选择小程序服务器?
  17. 隐藏窗口和任务栏图标的实现
  18. 股市java_Java获取股市交易日
  19. 【ARM Linux 系统稳定性分析入门及渐进 1 -- Crash 工具简介】
  20. Python在Linux下获取CPU温度、使用率、内存使用率、硬盘使用率

热门文章

  1. 解决手机浏览器顶部下拉出现网页源或刷新的问题
  2. cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded 解决方法
  3. 3DSMAX安装未完成,某些产品无法安装的解决方法
  4. IDEA导入Git项目后右键项目找不到Git选项的解决方法
  5. missing 1 required positional argument: ‘on_delete‘报错解决方案
  6. CSS显示属性上的过渡
  7. commons,jsoup,htmlunit,jackson,nekohtml,Object,xalan,xercesImpl,beanutils,lang3,httpclient,jar包下载
  8. linux向上翻页_Linux下vim编辑器命令大全
  9. JavaWeb中的Servlet原理是什么?(存库,建议收藏)
  10. 使用IDEA创建Maven项目教程