第三章:图

第三章:图

本章结构
基本概念
图的存储
图的遍历
图的应用
可存2种图
只能存一种图
深度优先
广度优先
有向图的应用
无向图的应用

Part1:图的基本概念

1、图的定义

假设有一个图,记为G(Graph),其顶点的集合记为V(Vertex),其边的集合记为E(Edge),则G=(V, E).其中
V = { v 1 , v 2 , ⋯   , v n } ( n ≥ 1 ) E = { ( v i , v j ) ∣ 1 ≤ i , j ≤ n } V=\{v_1,v_2,\cdots,v_n\} (n\geq 1)\\ E=\{(v_i,v_j) | 1\leq i,j \leq n\} V={v1,v2,,vn}(n1)E={(vi,vj)1i,jn}
对于E而言则还有一些分类,如果E中的边

  • 有指向性,包含了方向信息,Vi->Vj,记为<Vi, Vj>并称G为有向图
  • 无指向性,则记为(Vi, Vj)并称G为无向图

请添加图片描述

2、顶点的度

  • G为无向图,则顶点的度为顶点的边的数量
  • G为有向图
    • 出度:顶点指出的边的数量
    • 入度:指向顶点的边的数量

3、连通性

  • 顶点的连通:如果顶点Vi到达顶点Vj有路径存在,那么这两个顶点之间是连通的
  • 图的连通1:如果对于图中的任意一对顶点之间均存在路径,则称这个图是连通的

Part2:图的存储

1、可存储2种图(有向图/无向图)的方法

设有n个顶点的图G=(V, E)

1.1 邻接矩阵

思路:采用一个一维数组存储顶点,采用一个二维数组存储边

另邻接矩阵为An*n
A [ i ] [ j ] { 1 ( v i , v j ) / < v i , v j > ∈ E 0 ( v i , v j ) / < v i , v j > ∉ E A[i][j]\left\{\begin{array}{lr} 1 \quad (vi,vj)/<vi,vj> \quad \in E \\ 0 \quad (vi,vj)/<vi,vj> \quad \notin E \end{array}\right. A[i][j]{1(vi,vj)/<vi,vj>E0(vi,vj)/<vi,vj>/E
当G为带权图是Aij还可以表示其权重

请添加图片描述

1.2 邻接表

思路:采用一个一维数组存储顶点,每个顶点维护一条链表,记录顶点的边(无向图)/出边(有向图)

请添加图片描述

2、存储1种图的方法

接下来介绍的方法均为邻接表法1.2的扩展

2.1 十字链表法:有向图

请添加图片描述

2.2邻接多重表:无向图

请添加图片描述

Part3:图的遍历

1、深度优先

思路:尽可能深的探索一个图

请添加图片描述

2、广度优先

思路:尽可能广的探索一个图

请添加图片描述

Part4:图的应用

1、无向图的应用

1.1 最短路径:Dijkstra Algorithm(有向图和无向图均可使用)

从途中某个顶点出发到达另一个顶点,所经过的路径中权重最小的一条路径,成为最短路径。常用Dijkstra Algorithm求解

请添加图片描述

1.2 最小生成树

连通图的生成树,是包含图全部顶点,边最少,但仍然是连通的子图

最小生成树是生成树中权值最小者

1.2.1选点算法:Prim Algorithm

思路:从某一顶点开始构建,每次将代价最小(整个图)的一个顶点纳入其中,重复至无新顶点

请添加图片描述

1.2.2 选边算法:Kruskal Algorithm

思路:每次选择权值最小的一条边(如果这个边的两个顶点已经选入了,则不选),是的边的两端连通,重复至所有顶点纳入其中

请添加图片描述

2、有向图的应用

DAG(Directed Acyclic Graph):没有环的有向图

  • AOV:Activity on Vertex 用顶点表示活动
  • AOE:Activity on Edge 用边表示活动,顶点表示事件

2.1 DAG描述表达式

方法:

  • Step1:把各个操作数不重复的拍成一排
  • Step2:标出各个运算符的生效顺序
  • Step3:按照顺序加入运算符,可以同时生效的运算符放在同一层
  • Step4:逐层检查同层运算符是否可以合并

请添加图片描述

2.2 AOV拓扑排序

在AOV网中找到一个做事的先后顺序,由于在AOV网中顶点表示事件,故即为顶点序列

方法:选中一个没有前驱的顶点,输出;然后删除这个顶点和与之相关的边。重复该过程

请添加图片描述

2.3 AOE关键路径

2.3.1 基本概念

    • 源点:入度为0的点
    • 汇点:出度为0的点
  1. 关键路径:在AOE网中从源点到汇点的路径中长度最大的路径

  2. 在AOE网中如果有多个箭头(活动)同时指向一个顶点,那么必须这些活动均完成之后,才能进行该事件

    • Early

      • Vertex_early(Ve):事件最早发生时间
      • Edge_early(Ee):活动最早发生时间
    • Latest

      • Vertex_latest:事件最晚发生时间
      • Edge_latest:活动最晚发生时间

2.3.2 求解关键路径

即求解Ve即可

请添加图片描述

Part end:参考文献和一些说明


  1. 题目中可能会这样子的提法“保证G在任何情况下都是连通的”意思是无论怎么样用顶点和边来构建图形,这个图都是连通图。对于有n个顶点的无向图而言,要保证G在任何情况下都是连通的,其最少需要的边数可以这样子计算:另n-1个顶点之间全连接,在加上一条边到第n个顶点[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传请添加图片描述 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值