第六章 图

6.1 图的基本概念

1.图的定义:图G由顶点集V和边集E组成,记做G = {V,E},其中V(G)表示图G中顶点的有限非空集合。
			V表示图G中顶点的个数,也称为图G的阶。E 表示图中边的个数。
			注意:线性表可以是空表,树可以时空树,但图不可以是空,即V一定为非空集。
2.无向图、有向图
	若E 为无向边的有限集合,则图为无向图。
	若E 为有向边(也称为弧)的有限集合时,则图G为有向图。
3.简单图、多重图
	简单图-----①不存在重复边②不存在顶点到自身的边
			注:数据结构中仅探讨  "简单图"
	多重图-----图G中某两个结点之间的边数多余一条,又允许顶点通过同一条边与 自己关联
4.顶点的度、入度、出度
	对于无向图-----顶点v的度是指依附于该顶点的边的条数
	在具有n个顶点,e条边的无向图中,TD = 2e
	即无向图中全部顶点的度的和等于边数的两倍。
	
	对于有向图
	入度是以顶点v为终点的有向边的个数
	出度是以顶点v为起点的有向边的个数
	顶点v的度等于出度+入度
5.顶点---顶点的关系描述
	路径----顶点Vp 到顶点Vq之间的一条路径是指顶点序列,
	回路----第一个顶点和最后一个顶点相同的路径称之为回路或环
	简单路径-----在路径序列当中,顶点不重复出现的路径称之为简单路径。
	简单回路-----除了第一个顶点和最后一个顶点以外,其余顶点都不重复的回路称之为简单回路。
	路径长度----路径上边的数目。
	点到点的距离-----从顶点u出发到顶点v的最短路径若存在,则称此路径的长度为从u到v的距离。
					若从u到v根本不存在简单路径,则称该距离为无穷(∞)
	无向图中,若从顶点u到顶点v有路径存在,则称u和v是连通的
	有向图中,若从顶点v到顶点w,顶点w到顶点u之间都有路径,则称这两个顶点是强连通的

6.连通图、强连通图
	若图G中任意两个顶点是连通的,则称图G 为连通图,否则为非连通图
	注意:常见考点----对于n个顶点的无向图
					若G是连通图,则最少有n-1条边
					若G是非连通图,则最多有C2 n-1 条边
	
	若图G中任意一对顶点都是强连通的,则称此图为强连通图。
	注意:常见考点----对于n个顶点的有向图G
						若G是强连通图,则G至少有n条边(形成回路)
7.子图
	设有两个图G=(V,E) 和G'=(V',E').若V‘是V的子集,且E’是E的子集,则称G为G‘的子图。
	若有满足V’(G)=V(G)的子图G‘ ,则称其为G的生成子图
	
	无向图中的极大连通子图称为连通分量。
	极大连通子图:子图必须连通,并且要包含尽可能多的顶点和边
	
	有向图中的极大连通子图称为有向图的强连通分量
	强连通分量:子图必须强连通,同时保留尽可能多的边
8.生成树
	连通图的生成树是包含图中全部顶点的一个极小连通子图。	

6.2 图的存储

6.2.1 邻接矩阵

邻接矩阵要点:
	a)如何计算指定顶点的度、入度、出度(分无向图、有向图来考虑)?时间复杂度如何?
	b)如何找到与顶点相邻的边(入边、出边)?时间复杂度如何?
	c)如何存储带权图?
	d)空间复杂度-----O(|V|^2),适合存储稠密图
			只和顶点数相关,和实际的边无关
	e)无向图的邻接矩阵为对称矩阵,如何压缩存储?‘
			只存储上/下三角区
	f)设图G的临界矩阵为A(矩阵要素为0/1),则An的元素An[i][j]等于由顶点i到顶点j的长度为
	n的路径的数目

6.2.2 邻接表

												邻接表										   邻接矩阵
	空间复杂度						无向:O(V+2E) 有向:O(V+E)									O(E^2)
	适用于										存储稀疏图										存储稠密图					
	表示方法										不唯一												唯一		
	计算度、入度、出度					计算有向图的度、入度不方便						必须遍历对应的行或列
	找相邻的边								找有向图的入边不方便,其余很方便				必须遍历对应的行或列

6.2.3 十字链表

6.2.4 临界多重表

6.2.5 图的基本操作

6.3 图的遍历

6.3.1 广度优先遍历(BFS)

与树的广度优先遍历之间的联系

区别:
	树:不存在回路,搜索相邻的	结点时,不可能搜索到已经访问过的结点
	树的广度优先遍历(层次遍历):
	①若树非空,则根结点入队
	②若队列非空,将根节点出队,并访问,同时将该结点的孩子依次入队
	③重复②直到队空
   
	图:搜索相邻的结点时,可能会搜索到已经访问过的结点
	图的广度优先遍历要点:
	①找到与一个顶点相邻的所有顶点	
	②标记哪些顶点被访问过
	③需要一个辅助队列

算法实现

	后面再补(*****)

复杂度分析

空间复杂度:最坏情况,辅助队列大小为O(|V|)
时间复杂度:
	邻接矩阵存储的图:
	访问|V|个顶点需要O(|V|)的时间
	查找每个顶点的邻接点需要O(|V|)的时间,而 总共有|V|个顶点
	时间复杂度:O(|V|^2)

	邻接表存储的图:
	访问|V|个顶点需要O(|V|)的时间
	查找各个顶点的邻接点需要O(|E|)的时间
	时间复杂度:O(|V|+|E|)

广度优先生成树

广度优先生成树由广度优先遍历过程决定,由于邻接表的表示方法不唯一,因此邻接表的广度优先生成树也不唯一。
对于非连通图的广度优先遍历,可得到广度优先生成森林

6.3.2 深度优先遍历(DFS)(有点问题???看视频)

与树的深度优先遍历的联系

树的深度优先遍历(先根、后根):
从根结点出发,能往更深处走就尽量往深处走,每当访问一个结点的时候,要检查是否与当前结点相邻的且没有被访问过的结点,如果有的话就往下一层钻。
图的深度优先遍历类似于树的先根遍历

算法实现

后面再补

复杂度分析

空间复杂度:来自函数调用栈,最好为O(1)
时间复杂度:最坏情况,递归深度O(|V|)
时间复杂度 = 访问各个结点所需的时间+探索各边所需时间

邻接矩阵存储的图:
访问|V|个顶点需要O(|V|)的时间
查找每个结点的邻接点需要	O(|V|)的时间,而总共有|V|个顶点
时间复杂度 = O(|V|^2) 	

邻接表存储的图;
访问|V|个顶点需要O(|V|)的时间
查找各个顶点的邻接点需要O(|E|)的时间
时间复杂度 = O(|V|+|E|)

深度优先生成树

图的遍历和图的连通性

看视频

6.4 关于图的几种算法应用

6.4.1 最小生成树

最小生成树的概念

	对于一个带权连通无向图,生成树不同,每棵树的权也可能不同。设R为G的所有生成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的最小生成树。
	注意:
	①最小生成树可能有多个,但边的权值之和总是唯一且最小的。
	②最小生成树的边数 = 顶点数-1 . 砍掉一条边,则不连通,增加一条则出现回路。
	③如果一个连通图本身就是一颗树,则其最小生成树就是它本身
	④只有连通图才有生成树,非连通图会形成森林
	

	连通图的生成树是包含图中全部顶点的一个极小连通子图。

	若图中顶点数为n,则它的生成树含有n-1条边,对生成树而言,
    若砍去一条边,则变成非连通图,加上一条边,会形成环(回路)

普利姆算法

从某一个顶点开始构建生成树;	
每次将代价最小的新结点纳入到生成树当中,直到所有结点都纳入为止。
时间复杂度:O(|V^2|)
适合用于边稠密图

克鲁斯卡尔算法

每次选择一条权值最小的边,使这条边的两头连通(原本已经连通的就不选)
直到所有结点都连通
时间复杂度:O(|E|log2|E|)
适合于边稀疏图

6.4.2 最短路径问题

1.单元最短路径

BFS算法(无权图)代码
仅适用于无权图,或权值都相同的图
稍后再补
迪杰斯特拉算法(带权图,无权图)
带权路径长度---当图为带权图时,一条路径上所有边的权值之和,称为该路径的带权路径长度

2.各顶点间的最短路径(弗洛伊德算法)

稍后再补

6.4.3 有向无环图描述表达式(后序听课)

若一个有向图中不存在环,则称为有向无环图,简称DAG图。

6.4.4 拓扑排序

AOV网,用顶点表示活动的网
用有向无环图(DAG)表示一个工程,顶点表示活动,有向边表示活动Vi必须优先于Vj

拓扑排序:在一个图论当中,	由一个有向无环图的顶点组成的序列,当且仅当满足以下条件时,称为该图的一个拓扑序列:
①每个顶点出现且只出现一次
②若顶点A在序列中排在顶点B的前面,则在图中不存在顶点B到顶点A的路径。

本质:找到做事的先后顺序

逆拓扑排序

6.4.5 关键路径(AOE)

	顶点表示事件,有向边表示活动,以边上的权值表示该活动的开销,称之为用边表示活动的网络。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值