数据结构-图 知识点总结(课堂笔记)

图的相关内容较多,请根据所需按目录浏览

图的概念与基本操作

图是有一个顶点集V和一个边集E构成的数据结构
Graph=(V,E);

无向图

图中代表一条边的顶点的偶对如果无方向性即无序,则成此图为无向图 如下图:
在这里插入图片描述
V={V1,V2,V3,V4,V5};
E={(V1,V2),(V1,V4),(V2,V3),(V3,V4),(V2,V5)}
在无向图中,(x, y)与(y, x)表示同一条边。

有向图

图中代表一条边的顶点的偶对如果有序的,则称此图为有向图。在有向图中,用<x, y>表示一条有向边,在有向图中也称边为“”,x称为边的弧尾始点,称此边为顶点x 的一条出边;y称为边的弧头终点,称此边为顶点y 的一条入边。
如下图:
在这里插入图片描述
V={V1,V2,V3,V4};
E={<V1,V2>,<V1,V3>,<V3,V4>,<V4,V1>}
有向图中<x,y>与<y,x>是方向相反的两条弧

我们不考虑顶点到自身的边,并且也不允许一条边在图中重复出现。研究的图都为简单图,有以下特点:

  • 任何一个具有n个顶点的无向图,其边数小于等于n(n-1)/2
    用归纳法可证
  • 顶点数为n,边数等于n(n-1)/2的无向图被称为完全无向图
  • 任何一个具有n个顶点的有向图,其边数小于等于n(n-1) (为无向图的2倍)
  • 顶点数为n,边数等于n(n-1)的有向图被称为完全有向图
邻接点

图中若顶点V 和顶点W 之间存在一条边,则称顶点V和W互为邻接点,连接一对邻接点V和W的边是和顶点V和W相关联的边

一个顶点V的度是和顶点V关联的边的数目,记作D(V)。

有向图中,一个顶点依附的弧头数目,称为该顶点的入度,记作ID(V)。一个顶点依附的弧尾数目,称为该顶点的出度,记作OD(V)
某个顶点的入度和出度之和称为该顶点的度,即D(V)=ID(V)+OD(V)

例:
对无向图来说
在这里插入图片描述
D(B)=3
D(A)=2

对有向图来说
在这里插入图片描述
ID(B)=2
OD(B)=1
D(B)=2+1=3

若一个图中有n个顶点和e条边,则该图所有顶点的度和边数e的关系为(边数等于度数和的一半)
在这里插入图片描述

路径

在图G中,从顶点u 到顶点w之间存在一条路径(path)是一个序列Vi1,Vi2,…,Vin,其中u=Vi1,w=Vin;
若此图是无向图,则(Vij-1,Vij)∈E(G),(2≤j≤n);
若此图是有向图,则<Vij-1,Vij>∈E(G),(2≤j≤n)。
路径上经过的边的数目称为该路径的路径长度
若一条路径上除起点和终点可以相同外,其余顶点均不相同,则称此路径为简单路径
若一条路径上起点和终点相同,则称此路径为回路或环(cycle),简单路径组成的回路称为简单回路简单环

路径举例:
1,在这里插入图片描述
2,
在这里插入图片描述
路径{A,B,C,F}的长度为?
答:3
是否为简单路径?
是的呢

子图

设有两个图 G=(V, E) 和 G’=(V’, E’)。若 V’⊆V 且 E’⊆ E, 则称图G’是图G的子图

子图举例:
在这里插入图片描述

连通图和连通分量

无向图中, 若从顶点V1到顶点V2有路径, 则称顶点V1与V2是连通的,如果图中任意一对顶点Vi和Vj(Vi,Vj∈V)都是连通的, 则称此图是连通图,否则称此图是非连通图。无向图的极大连通子图称为此图的连通分量显然,任何连通图的连通分量只有一个,即本身;而非连通图有多个连通分量。

指出下面图是否为连通图,并找出其连通分量在这里插入图片描述
有向图中, 若对于每一对顶点Vi和Vj, 都存在一条从Vi到Vj的路径,同时还有一条从Vj到Vi的路径,则称此图是强连通图。有向图的极大强连通子图称为此图的强连通分量显然,任何强连通图的强连通分量只有一个,即本身;而非强连通图有多个强连通分量

指出下面图是否为强连通图,并找出其强连通分量在这里插入图片描述

有向网和无向网,权

在一个图中,每条边或弧可以标上具有某种含义的数值,此数值成为该边的权(weight)
弧或边带权的图分别称作有向图无向图
在这里插入图片描述

图的存储结构

邻接矩阵

邻接矩阵表示顶点之间相邻关系的矩阵。设G=(V,E)是具有n个顶点的图,则G的邻接矩阵是具有如下性质的n阶方阵。
在这里插入图片描述
无向图的邻接矩阵是对称的(因为方向一一对应,可以相反),有向图的邻接矩阵可能是不对称的

不带权
在这里插入图片描述
上图混合模式G71234 与5678肯定没有相邻关系所以邻接表相应位置全为0

带权
在图的术语中,我们提到了网的概念,也就是每条边上都带有权的图叫做网。那些这些权值就需要保存下来。
设图G是网图,有n个顶点,则邻接矩阵是一个n*n的方阵,定义为:
在这里插入图片描述

包含n个顶点的图的存储空间为n×n,对于那些边或弧较少的图,其邻接矩阵的非零元素较少,属稀疏矩阵,因此会造成一定存储空间的浪费。

可以根据邻接矩阵计算度的值
已知一个有向图的邻接矩阵表示,计算第i个结点的度的方法是
入度 求矩阵第i列非零元素之和出度 是矩阵第i行非零元素的和

已知一个有向图的邻接矩阵表示,删除所有从第i个结点出发的边的方法是将矩阵第i全部置为0

邻接表

1,为每个顶点建立一个单链表
2,第i个单链表中包含顶点Vi的所有邻接顶点
(邻接表是图的一种链式存储结构,类似于树的孩子链表表示法)
在这里插入图片描述

无向图的邻接表


在这里插入图片描述
邻接表如下:
在这里插入图片描述
Vi的度即为Vi单链表中边结点的个数
无向图邻接表中所有边结点的个数总和等于边数的2倍

有向图的邻接表

在这里插入图片描述
在这里插入图片描述
在有向图的邻接表中,连接的是每个结点的出边
在有向图的邻接表中,第i个链表中边结点的个数是顶点Vi的出度;但不容易计算该顶点的入度

有向图的逆邻接表

在这里插入图片描述
在这里插入图片描述
有向图的逆邻接表中,连接的是每个结点的入边
在有向图的逆邻接表中,第i个链表中边结点的个数是顶点Vi的入度
有向图的邻接表(或逆邻接表)中所有边结点的个数总和等于边数。

加权图的邻接表

在带权图中,不但需要表示顶点之间的邻接关系,而且要存储边上的权,这样就需在边表中添加一个域来表示相对应边上的权

求以下加权图的邻接表
在这里插入图片描述
在这里插入图片描述

图的遍历

深度优先遍历

过程:从图中某个顶点V₀出发,访问此节点,然后访问V₀邻接到的未被访问过的顶点V1,再从V1出发递归地按照深度优先遍历该图。当遇到一个所有邻接与它的顶点都被访问过了的顶点V时,则回到已访问顶点序列中最后一个拥有未被访问的邻接顶点w,再从w出发递归地按深度优先遍历,直至图中所有和v0有路径的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。


------------------------------------------------------- 深度优先生成树↓
在这里插入图片描述
深度优先搜索遍历连通图的过程类似于树的先序遍历所以有深度优先生成树

广度优先遍历

使用广度优先搜索在访问了起始顶点v之后,由v出发,依次访问v的各个未曾被访问过的邻接顶点w1,w2,…,wt,然后再顺序访问w1,w2,…,wt的所有还未被访问过的邻接顶点。再从这些访问过的顶点出发,再访问它们的所有还未被访问过的邻接顶点,…如此做下去,直到图中所有顶点都被访问到为止

~~-------------------------------------------------~~广度优先生成树↓
在这里插入图片描述
广度优先搜索遍历连通图的过程类似于树的层次遍历。

说明:
在这里插入图片描述

生成树
最小生成树

定义:生成树中边的权值(代价)之和最小的树。
构造最小生成树的准则
必须只使用该网中的边来构造最小生成树;
必须使用且仅使用n-1条边来联结网络中的n个顶点;
不能使用产生回路的边。

普利姆算法

添加顶点
在这里插入图片描述
取图中任意一个顶点 v 作为生成树的根,之后往生成树上添加新的顶点 w。在添加的顶点 w 和已经在生成树上的顶点v 之间必定存在一条边,并且该边的权值在所有连通顶点 v 和 w 之间的边中取值最小。之后继续往生成树上添加顶点,直至生成树上含有 n-1 个顶点为止。
一般情况下所添加的顶点应满足下列条件: 在生成树的构造过程中,图中 n 个顶点分属两个集合:已落在生成树上的顶点集 U 和尚未落在生成树上的顶点集V-U ,则应在所有连通U中顶点和V-U中顶点的边中选取权值最小的边
在这里插入图片描述

克鲁斯卡尔算法

对只有顶点的图 加边,连线

设有一个有n个顶点的连通网络N={V,E},最初先构造一个只有n个顶点,没有边的非连通图T={V, },图中每个顶点自成一个连通分量。当在E中选到一条具有最小权值的边时,若该边的两个顶点落在不同的连通分量上,则将此边加入到T中;否则将此边舍去,重新选择一条权值最小的边。如此重复下去,直到所有顶点在同一个连通分量上为止

在这里插入图片描述

有向无环图及其应用

一个无环的有向图称做有向无环图,简称DAG图
在这里插入图片描述
有向无环图是描述一项工程或系统的进行过程的有效工具。
对有向图进行拓扑排序求关键路径可解决工程中相关的实际问题

拓扑排序

在这里插入图片描述
AOV网中不能有环,否则工程无法顺利进行
在这里插入图片描述
在AOV网中,若不存在回路,则所有活动可排成一个线性序列,使得每个活动的所有前驱活动都排在该活动的前面,我们把此序列叫做拓扑序列,由AOV网构造拓扑序列的过程叫做拓扑排序

对AOV网进行拓扑排序的方法是:
对AOV网进行拓扑排序的方法是:
① 在AOV网中选择一个入度为0的顶点,并输出它到拓扑序列中;
② 从网中删去该顶点及它的所有出边;
反复执行①②两步,直到网中所有顶点都被输出了(拓扑序列完成),或网的剩余部分中再也选不出入度为0的顶点(图中有环)为止


对下列AOV网进行拓扑排序
在这里插入图片描述
拓扑排序为:1 3 2 4 6 5 7
其他拓扑排序?

工程上:
假设以有向图表示一个工程的施工图或程序的数据流图,则图中不允许出现回路。
检查有向图中是否存在回路的方法之一,是对有向图进行拓扑排序。
若拓扑有序序列里包含了有向图中的所有顶点,则表示该有向图中无环,否则该无向图中有环。

在这里插入图片描述
拓扑序列:A……
拓扑序列不能包含图中所有顶点,因为图中存在一个回路
{B,C,D}

关键路径(在AOE网中实现)

再次对AOE网进行说明,
AOE网:定义结点表示事件(时刻),弧表示活动,弧的权值表示活动进行所需要的时间。

利用AOE网进行工程管理时可解决下列问题:
(1) 完成整个工程至少需要多少时间?
(2) 哪些活动是影响工程进度的关键?
在这里插入图片描述
源点:表示整个工程的开始点,也称起点
汇点:表示整个工程的结束点,也称终点
AOE网中的源点与汇点是唯一的!

从源点到汇点具有最大路径长度的路径称为关键路径关键路径长度就是整个工程所需的最短工期;关键路径上的活动称为关键活动

事件结点(顶点):表示的是时刻
活动(有向边):它的权值定义为活动进行所需要的时间。方向表示起始结点事件先发生,而终止结点事件才能发生

事件的最早发生时间ve[k]

求法:由它的每个前驱事件j的最早发生时间分别加上相应入边<j, k>上的权,其值最大者就是事件k的最早发生时间(源点到汇点,加活动权值取大
因为源点没有入边,所以随时都可以发生。整个工程的开始时间就是它的发生时间,通常源点的最早发生时间定义为0,从此开始推出其他事件的最早发生时间。

事件的最迟发生时间vl[k]

求法:不影响工程如期完工,事件k必须发生的时刻。求法:由它的每个后继事件k的最迟发生时间分别减去相应出边<j,k>上的权,其值最小者就是事件j的最迟发生时间。 (汇点到源点,减活动权值取小
为了保证整个工程的按时完成,把汇点的最迟发生时间定义为它的最早发生时间,即vl[n]=ve[n]

活动ai的最早开始时间e[i]

活动的最早开始时间是他的起点事件最早发生时间
在这里插入图片描述
在这里插入图片描述

活动ai的最晚开始时间

ai的最晚开始时间等于事件k的最迟发生时间减去活动ai的持续时间
在这里插入图片描述
在这里插入图片描述

练习,求该AOE网中各活动的最早和最迟发生时
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关键活动与关键路径

最早开始时间和最迟开始时间相等的活动为关键活动;关键路径由关键活动组成。(上图打钩)
“关键活动”指的是:该弧上的权值增加将使有向图上的最长路径的长度增加,即延长工期。

求出AOE网的关键路径后,可通过加快关键活动来实现缩短整个工程的工期。但
(1)并不是加快任何一个关键活动都可以缩短整个工程的工期;
(2)关键路径是可以变化的,提高某些关键活动的速度可能使原来的非关键路径变为新的关键路径,因而关键活动的速度提高是有限度的。

欢迎指错!!!

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值