数据结构相关知识(图)

1.关于一条边(弧)的表示
1)用图形
2)用符号
(v1,v2):无向图
<v1,v2>:有向图
3)用语言

2.图的分类:
1)边是干干净净的,什么也没有:无向图
2)边加个方向:有向图
3)边加个权重:网络

3.顶点的度:依附于顶点vi的边的数目称为顶点vi的度,记为TD(vi),有向图中还分为出度(以顶点为起点的边的数目,记为OD(vi))和入度(以顶点为终点的边的数目,记为ID(vi))

4.完全图:边的数目达到最大的图称为完全图
稠密图:边的数目达到或接近最大的图称为稠密图
否则,称为稀疏图

5.顶点序列中顶点不重复出现的路径就称为简单路径(顶点序列其实就组成了一个路径)

6.不带权的图的路径长度指路径上所经过的边的数目;
带权图的路径长度是指路径上经过的边的权值之和

7.关于连通
1)无向图的连通:
无向图中顶点vi和vj有路径,则称vi和vj是连通的。若无向图中任意两个顶点都连通,则称该无向图是连通的
2)有向图的连通:
有向图中顶点和顶点之间的连通的定义和1)相同,如果有向图中所有顶点都连通,那称这个有向图是强连通的

1)连通分量:无向图中的极大连通子图
2)强连通分量:有向图中的极大强连通子图

9.生成树:包含连通图G的所有n个顶点,且仅包含其n-1条边的极小连通子图称为G的一个生成树

10.用邻接矩阵存储一个图:
用两个数组存储一个图
1)第一个数组是一个一维数组,用来存储所有的顶点
2)第二个数组是一个二维数组,用来存储各个顶点之间的边的信息,如下:
在这里插入图片描述

11.最小生成树不是唯一的

12.两种求最小生成树的算法中,克鲁斯卡尔算法是从边着手,普利姆算法是从点着手

13.用克鲁斯卡尔算法判断是否产生回路时,通过判断这个边的两个端点是不是在U里面来判断的方法只在无向图中行得通,在有向图中就没得玩了

13.迪杰斯特拉算法:
在这里插入图片描述
1)这里我解释一下第二点,为什么当前距离源点最近的点u,那么v到u的最短路径也确定了呢?你可以想一下,既然当前v到u的距离是最小的,那么即使从v到u可以有多条路径,但是那也是往后找到其它端点后,加了更多的距离到更远的路径上,这样就更不是最短路径了。(这样解释听起来很奇怪,但就是这么回事,你可以用反证法来在脑子里推理一下)
2)为什么要通过u来更新其它顶点的路径呢?因为相当于从最短的路径开始,寻找其它尚未找到最短路径的顶点的最短路径
3)一个简单的用一维数组记录最短路径的方法是Spath[vi]=vi-1,表示在从源点到顶点vi的最短路径上,vi的前驱端点是vi-1

14.最短路径和最小生成树是不一样的,比如下面这个图:
在这里插入图片描述
端点1到端点3的最短路径就是1和3之间的一条弧,而一条弧显然无法构成一个最小生成树;让你产生混淆的是最小生成树和所有的最短路径整合到一起后形成的最短路径生成树。
最小生成树和最短路径生成树和源点有关,比如下面的两个例子:
以1为源点
在这里插入图片描述

以7为源点:
在这里插入图片描述
15.AOV网的定义:以顶点表示活动,以有向边表示活动之间的优先关系的有向图称为顶点表示活动的网(activity on vertex network),简称AOV网,如
在这里插入图片描述
AOE网(activity on edge)的定义:AOE网为一个带权的有向无环图,其中,以顶点表示事件有向边表示活动边上的权值表示活动持续的时间,如:
在这里插入图片描述
正常情况下,AOE网中只有1个入度为0的顶点,称之为源点;有1个出度为0的顶点,称之为终点

16.前驱!=直接前驱,前驱的和路径有关,直接前驱和单条有向边有关

17.判断一个有向图是否存在回路:
方法1:找拓扑序列
方法2:进行深度优先遍历,从顶点v出发,如果遍历结束前存在一条从顶点u到顶点v的回路,那说明存在回路

18.AOE网的特点:
1)只有在某个顶点代表的事件发生以后,该顶点引发的活动才能开始
2)进入某事件的所有边代表的活动都已完成,该顶点代表的事件才能发生

19.关键路径的定义:从源点到终点的路径中具有的最大长度的路径关键路径,关键路径上的活动称为关键活动

20.事件k的最早发生时间
在这里插入图片描述

21.事件k的最晚发生时间le[k]:指不影响整个工期的前提下事件k必须发生的最晚时间,它必须保证从事件k出发的所有活动的终点事件的最迟发生时间,计算方法为:
在这里插入图片描述
为什么是min呢?因为不是min的话,随便加上哪条<k,j>,都会导致至少一件事件j延期

22.求关键路径的步骤:
1)先求所有事件的最早发生时间,一直求到终点时间的最早发生时间
2)由le[n-1]=ee[n-1],可以开始往前推,推各个事件的最晚发生时间
3)所有le[i]==ee[i]的时间i连起来就是关键路径

23.活动i的最晚开始时间,指不推迟整个工期的前提下活动i开始的最晚时间,计算方法为:
在这里插入图片描述
为什么是由后面的事件决定,而不是前面的事件呢?因为事件k完成了,活动i不一定要马上开始;而如果活动i延期开始,那必将影响事件j的最晚开始时间

猜你喜欢

转载自blog.csdn.net/yuanren201/article/details/106280901