数据结构_图_最小生成树

github地址:
https://github.com/arkulo56/thought/blob/master/software/dataStruct/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84_%E5%9B%BE_%E6%9C%80%E5%B0%8F%E7%94%9F%E6%88%90%E6%A0%91.md

图-最小生成树(联通网的最小代价生成树)

(有规律的连续访问多个顶点的需求)

假设你是电信实施工程师,需要为一个镇的九个村庄架设通信网络做设计,村与村之间的距离就是边的权重,领导要求用最小成本完成任务,你该怎么做???

  1. 最小生成树也就是最小权重生成树
  2. n个顶点拥有n-1条边(想想树的节点个数),使得所有顶点之间都有路径可达
  3. n个节点之间不能构成回路 重要!!!

Prim算法/普里姆算法

原理:对于图G=(V,E),用Prim算法求最小生成树T=(S,TE)的流程如下:

  1. 初始化:设S、TE为空集,任选顶点k加入S
  2. 选取一条权值最小的边(X,Y), 其中X
    S(X属于S),且 NOT(Y
    S)(Y不属于S),即:选取一条权值最小的、连接着S中一顶点和S外一顶点的边
  3. 重复步骤2,直到所有顶点都在S中

Kruskal算法

原理:图G=(V,E)

  1. 最小生成树T=(S,TE)
  2. 将G中的所有边按照权重进行升序排序,从小到大加入最小生成树
  3. 如果将选中的边加入TE后,TE不会形成环(回路),则加入,否则丢弃
  4. 重复步骤3,直到所有顶点都在S中

图形推演

总结

可以从图中看到,两种算法最后生成的最小生成树是一样的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 图是一种比线性表和树更复杂的数据结构,在图中,结点之间的关系是任意的,任意两个数据元素之间都可能相关。图是一种多对...
    Alent阅读 2,347评论 1 22
  • 数据结构与算法--最小生成树之Prim算法 加权图是一种为每条边关联一个权值或称为成本的图模型。所谓生成树,是某图...
    sunhaiyu阅读 2,100评论 0 7
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 5,822评论 0 19
  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 2,362评论 0 3
  • https://zh.visualgo.net/graphds 浅谈图形结构https://zh.visualgo...
    狼之独步阅读 4,236评论 0 0