数据结构中有关图的应用这一节的重点汇总

一:最小生成树


​​​​​最小生成树指的是对于一个带权连通无向图而言,生成树不同,则其权值不同(树中边上的权值之和)。若这课树中边上的权值之和最小,那么就称这课树为最小生成树。


最小生成树的性质

最小生成树并不唯一(树形不唯一)。

注:当图G中的各边权值互不相等时,G的最小生成树是唯一存在的,但是最小生成树的权值唯一(且是最小)。

最小生成树的算法

最小生成树的算法主要有Prim算法以及Kruskal算法(均基于贪心算法)

首先介绍Prim算法

可以简记为通过点来求解,主要有三个步骤

  • 找距离最短的点
  • 连接节点
  • 重复上述步骤

5bd7503e383e4b099370e42d8f707da4.jpg

 上图为prim算法构造最小生成树过程

prim算法的时间复杂度为O(|V|^2),不依赖边,适合求解边稠密的图的最小生成树。

Kruskal算法

简记为通过边来求解,也是三步

  • 找最短边
  • 连接节点
  • 重复上述步骤

04bc41fe748c41bab62caee8b1a3e5bf.jpg

上图为kruskal算法构造最小生成树过程

在kruskal算法中,采用堆来存放边的集合,姑每次选择最小权值的边只需要O(log2|E|)的时间,构造整个生成树的时间复杂度为O(|E|log2|E|),此算法适合于边稀疏而定点多的图。

注意:两种算法在构造树的过程中均不能形成闭环(回路)。

二:最短路径

定义:带权路径长度最短的那条路径称为最短路径。

最短路径的求法:

  1. 经典的Dijkstra(迪杰斯特拉)算法
  2. Floyd(弗洛伊德)算法

​​​​​​​1cdffde522cb4a4982c52f583407055c.jpg

 直接上图较为清晰

书上步骤比较繁琐,下面我将根据我个人的理解来讲解下。

首先画一个表格将定点数值写在纵坐标一栏,横坐标写的是经过查找最小路径的次数(轮数);从顶点出发依次找其到各个定点的距离(权值),能直接相连的就直接写边上的数值,也就是权值,如果不能直接相连的就代表其不能直接抵达,先写∞,然后从中找出最小的路径长度,将其视为下一轮的路径标准,重复此步骤,直到找完所有经过的最短路径。

至于Floyd算法和后续的拓扑排序以及关键路径的求解下一次再做总结,这节先讲到这里。

注:如有讲的不好,还请多多指教,期待交流探讨!

9992f59162e64402819093a037e487b4.jpg

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值