【数据结构——图】

第六章 图

图的基本概念

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图的存储

图的存储——邻接矩阵
  • 无向图

第i个结点的度 = 第i行(第i列)的非零元素个数

  • 有向图

第i个结点的出度 = 第i行非零元素个数
第i个结点的入度 = 第i列非零元素个数
第i个结点的度 = 第i行第i列的非零元素个数之和

数组实现的顺序存储,空间复杂度高,不适合存储稀疏图,空间复杂度跟顶点有关,跟边的数量没有关系

只要确定顶点编号,图的邻接矩阵表示方式唯一

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

图的存储——邻接表

图的邻接表表示方式不唯一

在这里插入图片描述

在这里插入图片描述

图的存储——十字链表

在这里插入图片描述
在这里插入图片描述

图的存储——邻接多重表

在这里插入图片描述
在这里插入图片描述

图的重要操作

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图的广度优先遍历
  • 遍历序列的可变性

因为邻接矩阵是唯一的,在进行广度优先遍历的时候,就是唯一的,但是邻接表是不唯一的,在进行广度优先遍历的时候,就不会是唯一的,因为邻接的所指向的指针的没有固定要求的顺序,可以进行改变,所以是不唯一的
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 时间复杂度

访问结点的时间 + 访问各条边的时间

邻接矩阵和邻接表的序列不同所以访问的时候,他所需要是的时间就不相同,邻接矩阵在访问结点的时候需要遍历所有的结点,遍历所有邻接的边的时候也是需要遍历所有的结点,邻接表遍历结点的时候是遍历所有结点,但是在遍历邻接的边的时候就是看当前这个结点有多少指针,遍历指针就行

在这里插入图片描述

  • 广度优先生成树

在进行图的遍历的时候,将第一次访问的边进行标记,就可以生成树,邻接表的序列不是唯一的,所以在进行优先生成树的也是不唯一的
在这里插入图片描述

  • 广度优先生成森林

非连通图进行广度优先生成树的时候就可以生成森林

在这里插入图片描述

图的深度优先遍历
  • 遍历序列的可变性

因为邻接矩阵是唯一的,在进行遍历序列的时候也就是唯一的,但是邻接表不是唯一的,他又不同的序列,所以在进行遍历序列的时候是不唯一的,这里跟广度优先遍历是一样的

在这里插入图片描述

  • 时间复杂度

时间复杂度 =访问各结点所需的时间 + 探索各条边所需的时间

在这里插入图片描述
在这里插入图片描述

  • 深度优先生成树

在进行访问的时候,将第一次被访问的边进行标记,就可以获得深度优先生成树

同一个图的邻接矩阵表示方式唯一,因此深度优先遍历序列唯一,深度优先生成树也唯一,同一个图的邻接表表示方式不唯一,因此深度优先遍历序列不唯一,深度优先生成树也不唯一

  • 深度优先生成森林

非连通图进行深度优先生成树的时候就可以生成森林

  • 图的遍历与图的连通性

对于无向图进行BFS/DFS遍历,调用BFS/DFS函数的次数=连通分量数,对于连通图,只需要调用一次BFS/DFS

对于有向图进行BFS/DFS遍历,分析它的指向,才能够确定调用函数的次数,但是对于强连通图来说,只需要调用一次
在这里插入图片描述

图的基本应用

最小生成树
  • 最小生成树可能有多个,但边的权值之和总是唯一且最小的

  • 最小生成树的边数 = 顶点数 - 1,砍掉一条则不连通,增加一条边则会出现回路

  • 如果一个连通图本身就是一棵树,则其最小生成树就是他本身

  • 只有连通图才有生成树,非连通图只有生成森林

在这里插入图片描述
在这里插入图片描述

  1. Prim算法(普利姆)

在这里插入图片描述
在这里插入图片描述

  1. Kruskal算法(克鲁斯卡尔)

在这里插入图片描述

在这里插入图片描述

  1. 两个算法的区别

在这里插入图片描述

在这里插入图片描述

最短路径问题——BFS算法

BFS算法求单源最短路径只适用于无权图,或所有边的权值都相同的图

在这里插入图片描述
在这里插入图片描述

最短路径问题——Dijkstra算法

迪杰斯特拉:1972年图灵奖得主

带权路径长度——当图时带权图时,一条路径上所有边的权值之和,称为该路径的带权路径长度。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

结论:Dijkstra算法不适用于有负权值的带权图

最短路径问题——Floyd算法

Floyd算法找顶点之间的最短路径,使用动态规划思想,将问题的求解分为多个阶段

对于n个顶点的图G,求任意一对顶点Vi~Vj之间的最短路径可分为如下几个阶段:

  1. 初始:不允许在其他顶点中转,最短的路径?
  2. 0,若允许在V0中转,最短路径?
  3. 1,若允许在V0,V1中转,最短路径?
  4. 2,若允许在V0,V1,V2中转,最短路径?
  5. n-1,若允许在V0,V1,V2…Vn-1中转,最短路径?

可以解决带负权值带权图,但是他不能解决带有负权回路的图,也就是有负权值的边组成的回路,这种图时没有最短路径的

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

有向无环图——描述表达式

有向无环图:若一个有向图中不存在环,则称为有向无环图,简称DAG图

在这里插入图片描述
在这里插入图片描述

有向无环图——拓扑排序:找到做事情得先后顺序

拓扑排序:在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列的条件时,称为该图的一个拓扑排序,

  1. 每个顶点出现且仅出现一次

  2. 若顶点A在序列中排在顶点B的前面,则在图中不存在从顶点B到顶点A的路径

或者定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得若存在从顶点A到顶点B得路径,则在排序中顶点B出现在顶点A得后面,每个AOV网都有一个或多个拓扑排序序列

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

关键路径

在AOE网中仅有一个入度为0得顶点,称为开始顶点(源点),他表示整个工程得开始,也仅有一个出度为0得顶点,称为结束顶点(汇点),他表示整个工程的结束,从源点到汇点的邮箱路径可能由很多条,所有路径中,具有最大路径长度的路径称为关键路径,而把关键路径上的活动称为关键活动,完成整个工程的最短时间就是关键路径的长度,若关键活动不能按时完成,则整个工程的完成时间就会延长

事件Vk的最迟发生时间——它是指在不推迟整个工程完成的前提下,该事件最迟必须发生的时间
活动ai的最迟开始时间——它是指该活动弧的终点所表示事件的最迟发生时间与该活动所需时间之差

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值