数据结构(十六)— 图结构之图的定义及术语

前面我们已经说了很多基本的数据结构,比如说线性表、栈、队列、串、树;有兴趣的朋友可以去我的博客看看,今天我们来说说最后一种数据结构:图。

图的定义

在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。这和一对父母可以有多个孩子,但每个孩子却只能有一对父母是一个道理。可现实中,人与人之间关系就非常复杂,比如我认识的朋友,可能他们之间也互相认识, 这就不是简单的一对一、一对多,研究人际关系很自然会考虑多对多的情况。那就是我们今天要研究的主题——图。图是一种较线性表和树更加复杂的数据结构。在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。

前面朋友可能觉得树的术语好多,可来到了图,你就知道, 什么才叫做真正的术语多。不过术语再多也是有规律可遁的,让我们开始“ 图 ”世界的旅程。如下图所示,先来看定义。
在这里插入图片描述
图( Graph )是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G (V,E ),其中, G 表示一个图, V 是图 G 中顶点的集合, E 是图 G 中边的集会。

对于图的定义,我们需要明确几个注意的地方。
• 线性表中我们把数据元素叫元素,树中将数据元素叫结点 ,在图中数据元素,我们则称之为顶点 (Vertex) 。

• 线性表中可以没有数据元素,称为空表。树中可以没有结点,叫做空树。 那么对于图呢?在图结构中,不允许没有顶点。在定义中,若 V 是顶点的集合,则强调了顶点集合V有穷非空。

• 线性表中,相邻的数据元素之间具有线性关系,树结构中,相邻两层的结点具有层次关系,而图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的。

各种图定义

无向边:若顶点 Vi 到 Vj 之间的边没有方向,则称这条边为无向边 (Edge) ,用无序偶对 (Vi,Vj) 来表示如果图中任意两个顶点之间的边都是无向边,则称该图为无向图 (Undirected graphs)。下图左边就是一个无向图,由于是无方向的,连接顶点 A 与 D 的边,可以表示无序队列(A,D),也可以写成 (D,A)。

对于下图中的无向图 G1 来说, G1= (V1,{ E1 }),其中顶点集合 V1={ A,B,C,D }; 边集合 E1={ (A,B) ,(B,C) , (C,D), ( D,A) , (A,C) }
在这里插入图片描述
有向边:若从顶点 Vi 到 Vj 的边有方向,则称这条边为有向边,也称为弧( Arc )

用有序偶<Vi,Vj>来表示. Vi 称为弧尾 (Tail) , Vj称为弧头 (Head)。 如果图中任意两个顶点之间的边都是有向边,则称该图为有向图 (Directed grahs) 。 上图右边就是一个有向图。连接顶点 A 到 D 的有向边就是弧,A是弧尾,D 是弧头, <A, D>表示弧, 注意不能写成<D,A>。

对于上图右边中的有向图 G2 来说, G2= (V2,{ E2 }) ,其中顶点集合 V2 = { A,B,C,D}; 弧集合 E2={ <A,D>,<B,A>,<C,A>,<B,C>}。

看清楚了, 无向边用小括号 “()” 表示,而有向边则是用尖括号"<>"表示

在图中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图。 我们文章里要讨论的都是简单图。显然下面的两个图就不属于我们要讨论的范围。
在这里插入图片描述
在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。含有 n 个顶点的无向完全图有 n * ( n - 1 ) / 2 条边。比如下图就是无向完全图,因为每个顶点都要与除它以外的顶点连线,顶点 A 与 BCD 三个顶点连线,共有四个顶点,自然是 4 X 3,但由于顶点 A 与顶点 B 连续后,计算 B 与 A 连续就是重复,因此要整体除以 2,共有 6 条边。
在这里插入图片描述
在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图。含有 n 个顶点的有向完全图有 n * (n-1) 条边,如下图所示。
在这里插入图片描述
从这里也可以得到结论,对于具有 n 个顶点和 e 条边数的图,无向图 0 <= e <= n ( n - 1) /2 ,有向图 0 <= e <= n (n-1) 。

有很少条边或弧的图称为稀疏图, 反之称为稠密图。这里稀疏和稠密是模糊的概念,都是相对而言的。

有些图的边或弧具有与它相关的数字,这种与图的边或弧相关的数叫做权 (Weight) 。这些权可以表示从一个顶点到另一个顶点的距离或耗费。这种带权的图通常称为网 (Network)。下图就是一张带权的图,即标识中国四大城市的直线距离的网,此图中的权就是两地的距离。
在这里插入图片描述
假设有两个图 G = (V,{ E } )和 G’ = ( V’ , {E’} ) ,如果 V’ 被 V 包含 且 E’ 被 E包含,则称 G’ 为 G 的子图 (Subgraph) 。例如下图带底纹的图均为左侧无向图与有向图的子图。
在这里插入图片描述

图的顶点与边间关系

对于无向图 G = (V, { E } ) , 如果边 (v,v’) 属于E , 则称顶点 v 和 v’ 互为邻接点 (Adjacent) ,即 v 和 v’相邻接。边(v , v’)依附 (incident) 于顶点 v 和 v’,或者说(v,v’)与顶点 v 和 v’相关联。 顶点 v 的度 (Degree) 是和 v 相关联的边的数目,记为 TD (v)。例如上图左侧上方的无向图,顶点 A 与 B 互为邻接点,边 (A,B) 依附于顶点 A 与 B 上,顶点 A 的度为 3 。而此图的边数是 5 ,各个顶点度的和 =3+2+3+2=10,推敲后发现,边数其实就是各顶点度数和的一半,多出的一半是因为重复两次计数。

对于有向图 G = (V, { E } ),如果弧<v,v’>属于 E,则称顶点 v 邻接到顶点 v’,顶点 v’ 邻接自顶点 v。 弧<v,v’>和顶点 v,v’ 相关联。以顶点 v 为头的弧的数自称为 v 的入度 (InDegree) ,记为 ID (v); 以 v 为尾的弧的数目称为 v 的出度 (OutDegree) ,记为 OD (v);顶点 v 的度为 TD (v) =ID (v) + OD (v) 。 例如上图左侧下方的有向图,顶点 A 的入度是 2 (从 B 到 A 的弧,从 C 到 A 的弧) ,出度是 1 (从 A 到 D 的弧) ,所以顶点 A 的度为 2+1=3 . 此有向图的弧有 4 条,而各顶点的出度和 =1+2+1+0=4,各顶点的入度和=2+0+1+1=4.。

无向图 G = (V, { E } ) 中从顶点 v 到顶点 v’的路径( Path )是一个顶点序列( V=Vi0, Vi1, …,Vi m=v’) ,其中 (Vi j-1,Vi j) 属于 E, 1 <= j <= m。如下图中就列举了顶点 B 到顶点 D 四种不同的路径。
在这里插入图片描述
如果 G 是有向图,则路径也是有向的,顶点序列应满足<Vi j-1, Vi j> 属于 E, 1 <= j <= m。如下图,顶点 B 到 D 有两种路径。而顶点 A 到 B,就不存在路径.

在这里插入图片描述
树中根结点到任意结点的路径是唯一的, 但是图中顶点与顶点之间的路径却是不唯一的。

路径的长度是路径上的边或弧的数目。上上图中加粗的上侧两条路径长度为 2,下侧两条路径长度为 3。上图加粗左侧路径长为 2 ,右侧路径长度为 3.

第一个顶点到最后一个顶点相同的路径称为回路或环 (Cycle)。 序列中顶点不重复出现的路径称为简单路径。除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简单回路或简单环。下图中两个图的粗线都构成环,左侧的环因第一个顶点和最后一个顶点都是 B ,但 C、 D、 A 没有重复出现,因此是一个简单环。 而右侧的环,由于顶点 C 的重复,它就不是简单环了
在这里插入图片描述

连通图相关术语

在无向图 G 中,如果从顶点 v 到顶点 v’有路径,则称 v 和 v’是连通的。 如果对于图中任意两个顶点vi、 vj 属于 E, vi 和 vj 都是连通的,则称 G 是连通图 (Connected Graph)。 下图的左图 ,它的顶点 A 到顶点 B、 C、 D 都是连通的,但显然顶点 A 与顶点 E 或 F 就无路径,因此不能算是连通图。而下图右图,顶点 A、B、C、D 相互都是连通的,所以它本身是连通图。
在这里插入图片描述
无向图中的极大连通子图称为连通分量。注意连通分量的概念,它强调:
• 要是子图;
• 子图要是连通的;
• 连通子图含有极大顶点数;
• 具有极大顶点数的连通子图包含依附于这些顶点的所有边。

上图左图是一个无向非连通图。 但是包有两个连通分量, 即上图的右图和下图左图。 而下图右图,尽管是上图左图的子图,但是它却不满足连通子图的极大顶点数 。 因此它不是上图左图的无向图的连通分图。
在这里插入图片描述
在有向图 G 中,如果对于每一对 vi、vj 属于 V,从 vi 不等于 vj ,从 vi 到 vj 和 vj 到 vi 都存在路径,则称 G 是强连通图有向图中的极大强连通子图称做有向图的强连通分量。 如下图,左图并不是强连通图,因为顶点 A 到顶点 D 存在路径,而 D 到 A 不存在。 右图就是强连通图,而且显然右图是左图的极大强连接子图,即是它的强连通分量。
在这里插入图片描述
现在我们再来看连通图的生成树定义。

所谓的一个连通图的生成树是一个极小的连通子图 ,它含有图中全部的 n 个顶点, 但只有足以构成一棵树的 n -1 条边。比如下图的图 1 是一普通图,但显然它不是生成树,当去掉两条构成环的边后,比如图 2 或图 3 ,就满足 n 个顶点 n-1 条边且连通的定义了。 它们都是一棵生成树。从这里也可知道,如果一个图有 n 个顶点和小于 n - 1 条边,则是非连通图,如果它多于 n - 1 边条,必定构成一个环, 因为这条边使得它依附的那两个顶点之间有了第二条路径。比如图 2 和图 3 ,随便加哪两顶点的边都将构成环。 不过有 n - 1 条边并不一定是生成树,比如图 4
在这里插入图片描述
如果一个有向图恰有一个顶点的入度为 0,其余顶点的入度均为 1,则是一棵有向树。对有向树的理解比较容易,所谓入度为 0 其实就相当于树中的根结点, 其余顶点入度为 1 就是说树的非根结点的双亲只有一个。一个有向图的生成森林由若干棵有向树组成,含有图中全部顶点,但只有足以构成若干棵不相交的有向树的弧。 如下图的图 1 是一棵有向图。去掉一些弧后,它可以分解为两棵有向树,如图 2 和图 3 ,这两棵就是图 1 有向图的生成森林。
在这里插入图片描述

图的定义与术语总结

术语终于介绍得差不多了,可能有不少朋友有些头晕,我们再来整理一下。

图按照有无方向分为无向图和有向图。无向图由顶点构成,有向图由顶点构成。弧有弧尾和弧头之分。

图按照边或弧的多少分稀疏图和稠密图。如果任意两个顶点之间都存在边叫完全图有向的叫有向完全图。若无重复的边或顶点到自身的边则叫简单图

图中顶点之间有邻接点、依附的概念。无向图顶点的边数叫做度,有向图顶点分为入度出度

图上的边或弧上带权则称为网

图中顶点间存在路径,两顶点存在路径则说明是连通的,如果路径最终回到起始点则称为环, 当中不重复叫简单路径。若任意两顶点都是连通的,则图就是连通图, 有向则称强连通图。 图中有子图 ,若子图极大连通则就是连通分量, 有向的则称强连通分量

无向图中连通且 n 个顶点 n - 1 条边叫生成树。有向图中一顶点入度为 0 其余顶点入度为 1 的叫有向树。 一个有向图自若干棵有向树构成生成森林。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值