数据结构【图】

声明:

V:顶点 E:边
有向完全图:在这里插入图片描述
连通图: 在这里插入图片描述
简单路径:在路径序列中,顶点不重复出现的路径称为 简单路径

有向图:

度= 入度+出度

入度和=出度和

强连通是指有向图【A->B B->A】

保证 强连通至少n条边

子图

强连通分量:就是在原有的图上面进行分离,分离尽可能多的边和顶点

有向完全图::任意两个顶点之间都存在两条相反的弧 n个顶点 2C²n条边

邻接矩阵法:出度:看行 入度:看列


无向图 n个定点

度=:[E]2 边2

连通图指无向图,如果要

保证为 **连通图 ** 至少要n-1条边

非连通图 最多有 C²n-1条边

子图

连通分量:就是在原有的图上面进行分离,分离尽可能多的边和顶点

生成树:包含图中 ** 全部顶点 **的一个极小连通子图(也就是边要尽可能的少) n-1条边

无向完全图:任意两个顶点之间都存在边 n个定点 边为C²n

** 除邻接矩阵表示(排序)方式唯一,其他的都不唯一 **

邻接矩阵法 O(|V|²)

适合边多的图,不适合稀疏图 o(n²)

在这里插入图片描述

邻接表发(顺序+链式存储)
邻接表表示 能够直接接连的节点。
如:1–2 1–5

在这里插入图片描述

十字链表法(只限于有向图

找某节点 出边 顺着绿色

找某节点 入边 顺着橙色色

在这里插入图片描述

邻接多重表(无向图

跟上图十字链表很相似,当删除B节点时候,会直接将节点删除,这样关联b的线路都会断掉。

​ 而十字链表法是 当删除B的时候,根据B的线路进行删除线,而不是节点

广度优先遍历 BFS

广度优先遍历: 见名知意,广泛的扩展节点的走向

在这里插入图片描述

如果邻接矩阵的方式的话:那么久应该按照 节点的大小进行

如果不是那么排序的方式可以为多种

广度优先生成树

在这里插入图片描述

广度优先生成森林

深度优先遍历DFS

DFS:见名知意,深度的去挖掘所连接的节点,如果不能走下去,那么返回上一个节点,然后再去深挖相连线的节点。

邻接矩阵

在这里插入图片描述

2开始2 1 5 6 3 4 7 8
3:3 4 7 6 2 1 5 8
4:4 3 6 2 1 5 7 8
1:1 2 6 3 4 7 8 5

邻接表(复杂点) 不唯一

在这里插入图片描述

2:2 6 7 8 4 3 1 5
3:3 6 2 1 5 7 8 4
1:1 2 6 7 8 4 3 5

最小生成树

最小生成树的代价,各路线是不进行累加的,只计算单点的路线;
如:p城–>矿场–>渔村,渔村的代价在数组中还是是为:2

Prim 算法(普⾥姆) 稠密图

每次都找已有节点的 最小代价线路 进行。

例: P城–>学校 P城–>矿场 矿场–>渔村 P城–>农场 农场–>电站

在这里插入图片描述

Kruskal 算法(克鲁斯卡尔) 稀疏图

每次都选择代价最少的一条边进行连接。

例: 农场–>电站 P城–>学校 矿场–>渔村 P城–>矿场 农场–>P城

在这里插入图片描述

最短路径(代价路线的进行累加的)

代价路线是进行累加的:如V0->V1->V2,那么V2在数组中的代价就是为 11

Dijkstra(迪杰斯特拉)算法

特点:不适合带有 负权值的 路线

如果不看代码:只让手动找到路线。 那么就直接看哪个路线
就是查看V0-V2 哪个 条线路的代价最低。
在这里插入图片描述

Floyd算法–p228(王道书)

运算原理:根据矩阵来看,每次根据已经知道的节点权值进行相加,然后选出最小的值。
在这里插入图片描述

如果不看代码:只让手动找到路线。 那么就直接看哪个路线

A(-1):表示各顶点之间的最短路径
path(-1):表示两个顶点的中转点

有向无环图

初步一:
在这里插入图片描述
第二步:将相同的合并
在这里插入图片描述
例题:(x+y)((x+y)/5) 顶点个数最少为? --5

拓扑排序(AOV)

如果图有换是肯定不纯在拓扑排序的
从正常的入度为0的点开始,需要一步一步走,不能删除还有线连接的节点

正常的拓扑排序

准备厨具->买菜->洗番茄->打鸡蛋->切番茄->下锅炒->吃

逆拓扑排序
出度为0的顶点开始

吃->下锅炒->切番茄->洗番茄->打鸡蛋-买菜-准备厨具 (不唯一)
在这里插入图片描述

关键路径(重要)

AOE网,顶点 | 表示事件(路径)、有向边 | 表示活动

最大长度的路径并且不可替换,由顶点进行组成的称为:关键路径
而关键路径上面的活动称为:关键活动

最迟开始时间-最早开始时间 = 时间余量
时间余量为0的活动点,为关键活动, 找到关键活动就可以找到关键路径

在这里插入图片描述


最早发生时间:需要依赖 正拓扑排序 max
最迟发生时间:需要依赖逆拓扑排序
最迟发生时间:权值看的是 直接连接路径 min

计算顺序(重要)
先路径(节点)最早/晚,然后活动(线路)最早/晚

1、 根据拓扑排序先进行算出 (路径)节点的最早\最迟发生时间 (也可以不按照拓扑排序)
2、 然后再根据节点 活动的前一个节点(正向\逆向)算出活动的最早\最迟发生时间
3、 再由最早\最迟 活动算出余量,最后得出 关键路径/关键活动

例:
(拓扑不唯一)
正拓扑:V1–V3–V2–V4–V5–V6
逆拓扑:V6–V5–V4–V2–V3–V1
路径最早: 正这来算 要最大值MAX

V1V3V2V4V5V6
023668

路径最迟min:反这来算 看直接路径 要最小值MIN

V6V5V4V2V3V1
876420

活动最早:

a1a2a3a4a5a6a7a8
V1=0V1=0V2=332266

活动最迟:

a1a2a3a4a5a6a7a8
10442V6-a6=5V6-a7=6V6-a8=7

余量: 最迟-最早(活动)

a1a2a3a4a5a6a7a8
10110301

即关键路径为: (余量为0点,顶点组合)
V1–V3–V4–V6
关键活动:(余量为0点的活动)
a2、a5、a7

在这里插入图片描述

注意事项

· 关键活动耗时增加\减少、整体工程增加\减少
· 当关键活动缩短到一定程度可能会变成 非关键活动

注意:(重)
1、关键路径是可能会有多条
2、如果有多条关键路径,想要 缩短工程的进度,那么缩短的路径,必须是 几条关键路径都包含的节点。
无向图的邻接矩阵是对称阵

关键路径求解:
只需求求出节点的:(重要) 最早和最晚即可,进行对比哪个为相同的。

练习题

关键路径求解:
在这里插入图片描述
解答:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值