数据结构第六章(一) -图

数据结构第六章(一)



一、图的基本概念

感觉要想怎么定义图,图就是顶点和边组成的集合。完了图中有一些比较容易混淆的概念,这些都得有个印象。

先总体给个图的定义:

图G由顶点集V (Vertex)和边集E (Edge)组成,记为G={V,E},其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。

若V={v1,v2,...,vn},则用|V|表示图G中顶点的个数,也称图G的阶,E={(u,v) | u∈V,v∈V},用|E|表示图G中边的条数

注意:线性表可以是空表,树可以是空树,但图不可以是空,即V一定是非空集。

有点干,上个图;

当然,由上面可知,一个图也可以只有顶点没有边,也就是有V,但E=∅。

1.图的分类、度、权等

我们根据图的边有没有方向可以把图分为有向图和无向图,即:

  • 若E是无向边(简称)的有限集合时,则图G为无向图。边是顶点的无序对,记为(v,w)或者(w,v),因为(v,w)=(w,v),其中v,w是顶点,可以说顶点w和顶点v互为邻接点。边(v,w)依附于顶点w和v,或者说边(v,w)和顶点v,w相关联。

  • 若E是有向边(也称)的有限集合时,则图G为有向图。弧是顶点的有序对,记为<v,w>,其中v,w是顶点,v称为弧尾,w称为弧头,<v,w>称为从顶点v到w的弧,也称v邻接到w,或w邻接自v。<v,w>≠<w,v>

一个箭头 v ------>w,弧尾就是v,弧头就是w,就把箭头的头当成弧头的头就行了。

图还分为简单图和多重图:

简单图:不存在重复边,不存在顶点到自身的边。

多重图:图G中某两个结点之间的边数多于一条,又允许顶点通过同一条边和自己关联,则G为多重图。

什么意思呢?就是说你看看这个图里面有没有自己指向自己的,有没有俩顶点有两个同样的边的,有就是多重图,没就是简单图,咱们未来只讨论简单图。

顶点的度、入度、出度

无向图

对于无向图而言,顶点v的度是指依附于该顶点的边的条数,记为TD(v)。

在具有n个顶点、e条边的无向图中,所有顶点的度之和=2e,即无向图的全部顶点的度的和等于边数的2倍

有向图

入度是以顶点v为终点的有向边的数目,记为ID(v);

出度是以顶点v为起点的有向边的数目,记为OD(v);

顶点V的度等于其入度和出度之和,即TD(v)=ID(v)+OD(v).

在具有n个顶点、e条边的有向图中,所有顶点的入度之和=所有顶点的出度之和=e

2.路径、回路、连通等

  • 路径 ------顶点vp到顶点vq之间的一条路径是指顶点序列vp,vi1,vi2,...,vim,vq

  • 回路------第一个顶点和最后一个顶点相同的路径称为回路或环;

  • 简单路径------在路径序列中,顶点不重复出现的路径称为简单路径;

  • 简单回路------除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路称为简单回路;

  • 路径长度------路径上边的数目;

  • 点到点的距离 ------从顶点u出发到顶点v的最短路径若存在,则此路径的长度称为从u到v的距离

  • 若从u到v根本不存在路径,则记该距离为无穷(∞)。

注意:有向图的路径也是有向的。

  • 无向图中,若从顶点v到顶点w有路径存在,则称v和w是连通的;

  • 有向图中,若从顶点v到顶点w和从顶点w到顶点v之间都有路径,则称这两个顶点是强连通的。

注意:连通指的是无向图,强连通指的是有向图。

  • 无向图图G中任意两个顶点都是连通的,则称图G为连通图,否则称为非连通图

  • 有向图图G中任何一对顶点都是强连通的,则称此图为强连通图

那这就有点要说的东西了,要开始问了:如果对于n个顶点的无向图G,若图G是连通图,则最少有多少条边?

既然是最少,那就是除了让它们这些顶点有一丝连接外其他的没必要的都没有,所以以一个顶点为基点,去向外连接各个其他顶点,这就是最少的情况,也就是n-1条边。(形状大概是一个爪型,最少嘛,再少就不是连通图了)

那再问一个,如果对于n个顶点的无向图G,若图G是非连通图,则最多有多少条边?

既然是最多,那就是先把一个顶点刨出来,让其他的顶点尽可能地多连,这个刨出来的顶点不和他们连(因为连了就是连通图,人家说要非连通图),所以最多可能有C2n-1条边。

那么有向图也有要问一个,如果对于n个顶点的有向图G,若图G是强连通图,则最少有多少条边?

有向图,又要是强连通图,强连通图就是所有顶点之间都有路径(能走通就行,不一定是非得一个两顶点直连),那么最简便的方式就是直接一个接一个按照同方向串起来,所以最少有n条边(也就是形成回路的情况)。

3.连通分量、生成树等

在说图的局部 之前,先说个子图是啥玩意儿:

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

若有满足V(G')=V(G)的子图G',则称其为G的生成子图

其实生成子图就是顶点不能少,一个都不能少。而且子图首先得是个图,如果不是图那也不是子图。

无向图中的极大连通子图称为连通分量。

这句话,什么是极大连通子图?就是图中最大的连通子图,不能被包含在更大的连通子图中。在连通图中,整个图即为一个极大连通子图;在不连通图中,极大连通子图对应各个独立的连通分量。

有向图中的极大强连通子图称为强连通分量。

同理,只不过多了个强,它以后再也不用要强了,因为它的强来了。

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

注意,这里说的是连通图,也就是无向图!!!

这个极小连通子图的极小是啥意思呢?意思就是说边要尽可能地小,但要保持连通。那又回到我们之前说的,边尽可能地小的话,又要让它保持连通,我们怎么说来着?最少会有n-1条边(因为再少就不连通了)。但是要知道,一个图可能不止有一个生成树,上个图:

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

非连通图中,连通分量的生成树构成了非连通图的生成森林

上个图就明白了:

  • 边的权 ------在一个图中,每条边都可以标上具有某种含义的数值,该数值称为该边的权值

  • 带权图/网 ------边上带有权值的图称为带权图 ,也称

  • 带权路径长度 ------当图是带权图时,一条路经 上所有边的权值之和,称为该路径的带权路径长度

这个边的权值其实就是给各边赋予一个实际的意义。

二、几种特殊的图

1.完全图

无向完全图------无向图中任意两个顶点之间都存在边

若无向图的顶点数|V|=n,则 |E|∈[0,C2n] = [0,n(n-1)/2]

有向完全图------有向图中任意两个顶点之间都存在方向相反的两条弧

若有向图的顶点数|V|=n,则 |E|∈[0,2C2n] = [0,n(n-1)]

也不知道有什么意义,反正图很丑,不信看看:

2.稠密图、稀疏图

就字面意思,边数很少的图称为稀疏图 ,反之就是稠密图

也没有绝对的界限,一般来说|E|<|V|log|V|时,可以将G视为稀疏图。这个不用记,就了解一下。

3.树、有向树

树呢该怎么和图联系一下?其实就是一个不存在回路,而且连通无向图,把树横过来啥的不就是我们平常看到的图的样子了吗。

n个顶点的树,必有n-1条边。

想想也是了,每个结点都有双亲结点,但是根节点没有,所以必有n-1条边。

这个"n-1"是不是有点眼熟,什么来着?我们之前说过,如果要想让一个图连通,那么最少是n-1条边是吧。那其实也可以反之,如果有个n个顶点的图,若|E|>n-1,则一定有回路

有向树------一个顶点的入度为0,其余顶点的入度均为1的有向图,称为有向树。

(就是本来不直接连孩子吗,现在连孩子的那个线都有个箭头指向孩子。)

三、常见考点

对于n个顶点的无向图G:

  • 所有顶点的度之和=2|E|

  • 若G是连通图,则最少n-1条边(树),若|E|>n-1,则一定有回路

  • 若G是非连通图,则最多 可能有C2n-1条边

  • 无向完全图共有C2n条边

对于n个顶点的有向图G:

  • 所有顶点的入度之和=所有顶点的入度之和=|E|

  • 所有顶点的度之和=2|E|

  • 若G是强连通图,则最少n条边(形成回路)

  • 无向完全图共有2C2n条边


总结

就是说了一下图的一些常用的概念,这些概念在之后也会用到。要注意的就是连通图最少n-1条边,非连通图最多C2n-1条边,这些都是无向图。有向图的话强连通图最少有n条边,是一条回路。

相关推荐
baobao17676408307 分钟前
C语言进阶之字符函数和字符串函数
c语言·算法
Kita~Ikuyo28 分钟前
基础数学:图论与信息论
python·算法·llm·图论
三次拒绝王俊凯30 分钟前
数据结构day05
数据结构
烟锁池塘柳040 分钟前
【数学建模】(智能优化算法)粒子群优化算法(PSO)详解与Python实现
算法·数学建模
西岭千秋雪_1 小时前
Sentinel核心算法解析の滑动窗口算法
分布式·算法·spring cloud·微服务·中间件·sentinel
Qiu的博客1 小时前
一文读懂 AI
人工智能·算法·开源
Murphy_lx2 小时前
排序(1)
数据结构·算法·排序算法
菜树人2 小时前
c/c++ 使用libgeotiff读取全球高程数据ETOPO
c语言·c++
追逐☞2 小时前
机器学习(5)——支持向量机
算法·机器学习·支持向量机
*+2 小时前
集合框架二三事
数据结构·算法