数据结构-图

1.图的定义

图是由一个顶点集 V 和一个弧集 R构成的数据结构。
Graph = (V , R ) , R={VR}
其中,VR={<v,w>| v,w∈V 且 P(v,w)}
<v,w>表示从 v 到 w 的一条弧,并称 v 为弧头,w 为弧尾。

由于“弧”是有方向的,因此称由顶点集和弧集构成的图为有向图
在这里插入图片描述

若<v, w>∈VR 必有<w, v>∈VR,
则称 (v,w) 为顶点v 和顶点 w 之间存在一条边。

由顶点集和边集构成的图称作无向图。
在这里插入图片描述
弧或边带权的图分别称作有向网无向网
在这里插入图片描述
假设图中有 n 个顶点,e 条边,则
含有 e=n(n-1)/2 条边的无向图称作完全图
含有 e = n(n-1) 条弧的有向图称作 有向 完全图
若边或弧的个数 e<nlogn,则称作稀疏图,否则称作稠密图

2.图的存储

2.1邻接矩阵、邻接表法

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

在这里插入图片描述

2.2 邻接多重表、十字链表

2.2.1邻接多重表

2.2.2十字链表

3.图的遍历

3.1深度优先遍历DFS

算法思想
       从图中某个顶点V0 出发,访问此顶点,然后选择一个与V0邻接且未被访问的顶点W为初始顶点,再从W出发进行深度优先搜索, 直至图中所有和V0有路径相通的顶点都被访问到
手工操作
在这里插入图片描述

3.2广度优先遍历BFS

算法思想

       从图中的某个顶点V出发,并在访问V0之后依次访问V0的各个未被访问的邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有和V0有路径相通的顶点都被访问到。
       若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。
手工操作
在这里插入图片描述
使用广度优先搜索在访问了起始顶点 v 之后,由 v 出发,依次访问 v 的各个未曾被访问过的邻接顶点 w1, w2, …, wt,然后再顺序访问 w1, w2, …, wt 的所有还未被访问过的邻接顶点。再从这些访问过的顶点出发,再访问它们的所有还未被访问过的邻接顶点,… 如此做下去,直到图中所有顶点都被访问到为止。

4.图的相关应用

4.1最小生成树MST

最小生成树的树形不是唯一的,代价是唯一的
算法总结

Prim 算法Kruskal算法
时间复杂度O(n2)O(eloge)
适用场景稠密图稀疏图

4.1.1Prim算法(加点法)

与定点有关适合稠密图
算法思想
       取图中任意一个顶点 v 作为生成树的根,之后往生成树上添加新的顶点 w。在添加的顶点 w 和已经在生成树上的顶点v 之间必定存在一条边,并且该边的权值在所有连通顶点 v 和 w 之间的边中取值最小。之后继续往生成树上添加顶点,直至生成树上含有 n-1 个顶点为止。
手工操作
在这里插入图片描述

4.1.2Kruskal算法(加边法)

与边有关适合稀疏图
算法思想
       为使生成树上边的权值之和达到最小,则应使生成树中每一条边的权值尽可能地小。
       先构造一个只含 n 个顶点的子图 SG,然后从权值最小的边开始,若它的添加不使SG 中产生回路,则在 SG 上加上这条边,如此重复,直至加上 n-1 条边为止
手工操作
在这里插入图片描述

4.2最短路径

迪杰斯特拉弗洛伊德
时间复杂度O(n2)O(n3)

4.2.1迪杰斯特拉(Dijksta)算法

在这里插入图片描述

4.2.2弗洛伊德(Floyd)算法

在这里插入图片描述

4.3AOV网

4.4关键路径

完成整个工程所需的时间取决于从源点到汇点的最长路径长度,即在这条路径上所有活动的持续时间之和。这条路径长度最长的路径就叫做关键路径(Critical Path)。
在这里插入图片描述

事件发生时间的计算公式:
ve(源点) = 0;
ve(k) = Max{ve(j) + dut(<j, k>)}
vl(汇点) = ve(汇点);
vl(j) = Min{vl(k) – dut(<j, k>)}
        关键活动的速度提高是有限度的。只有在不改变网的关键路径的情况下,提高关键活动的速度才有效。
        另一方面,若网中有几条关键路径,那么,单是提高一条关键路径上的关键活动的速度,还不能导致整个工程缩短工期,而必须提高同时在几条关键路径上的活动速度

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值