本文已参与「新人创作礼」活动,一起开启掘金创作之路。
GitHub同步更新(已分类):Data_Structure_And_Algorithm-Review
公众号:URLeisure 的复习仓库 (点击可见公众号二维码)
提示:以下是本篇文章正文内容,下面案例可供参考
概述
-
前面文章写了
线性表
和树形结构
。 -
在线性表中,数据元素是一对一的关系,除了第一个和最后一个元素外,每个元素都有唯一的前驱和后继。
-
在树形结构中,数据元素是一对多的关系,除了根之外,每个节点都有唯一的双亲节点,可以有多个孩子。
-
之后文章中的
图形结构是多对多的关系,任何两个数据元素都可能有关系,每个节点可以有多个前驱和后继
。 -
图的应用非常广泛,例如交通图,神经网络等。
图片来源:百度,侵删
图的基本术语
-
图通常用一个二元组 表示,V 表示顶点集,E 表示边集。
-
|V| 表示顶点集中元素的个数,即
顶点数
,n 个顶点的图称为 n 阶图。 -
|E| 表示边集中元素的个数,即
边数
。 -
注意:顶点集 V 和边集 E 均为有限集合,其中
E 可以为空集,V 不可以为空集
,但在运算中,可能产生 V 为空集。V 为空集的图称为空图
。
1). 无向图
-
若图 G 中每条边都是没有方向的,则称为无向图。
-
如图,每条边都是两个顶点组成的
无序对
,例如顶点 V1和顶点 V3之间的边,记为 (V1,V3)或(V3,V1)。
2). 有向图
-
若图 G 中每条边都是有方向的 则称为有向图。
-
如图,
有向边也称为弧
,每条弧都是由两个顶点组成的有序对
,例如从顶点 V1到顶点 V3的弧,记为 <V1,V3>,V1称为弧尾,V3称为弧头。
3). 简单图
既不含平行边也不含环的图称为简单图,
上图均为简单图。
- 无向图中,若关联一对顶点的无向边
多于一条
,则称这些边为平行边。 - 有向图中,若关联一对顶点的无向边
多于一条且这些边的始点和终点相同(方向一致)
,则称这些边为平行边。 - 自环是指一条边关联的两个顶点为同一个顶点,也就是自己到自己有一条边。
含有平行边的图称为多重图
,平行边的条数称为重数
。
4). 完全图
在无向图中,任意两个点都有一条边,则该图称为无向完全图
,含有 n 个顶点的无向完全图,每个顶点到其他的 n-1 个顶点都有边,一共有
条边。
在有向图中,任意两个点都有两条方向相反的两条弧,则该图为有向完全图
,含有 n 个顶点的有向完全图,每个顶点发出 n-1 条边,并且进来 n-1 条边,一共有
条边。
5). 稀疏图和稠密图
-
有很少边或弧的图称为稀疏图,反之,则称为稠密图。
-
一般,若图 G 满足 ,则称 G 为稀疏图。
6). 网
-
图的边上带值时,该数值称为边的权值,即带权的图称为网。
-
如,在图的边上标注距离、时间、耗费等数值。
7). 邻接和关联
-
邻接
是指顶点和顶点之间的关系,关联
是指边和顶点的关系。 -
邻接:
有边/弧相连的两个顶点之间的关系,如无向边(Vi,Vj),则称 Vi和 Vj互为临界点;有向边 <Vi,Vj>,则称 Vi邻接到 Vj,Vj临界与 Vi。 -
关联:
若存在(Vi,Vj)或 <Vi,Vj>,则称该边或弧关联与 Vi和 Vj。
8). 顶点的度
-
顶点的度是指与该顶点相关联的边的数目,即为 TD(v)。
-
握手定理:度数之和等于边数的两倍,即 。
-
其中,n 为顶点数,e 为边数。
-
在计算度数之和时,每条边算了两次。
在有向图中,顶点的度又分为入度
和出度
。
- 顶点 v 的入度是以 V 为终点的有向边的条数,记作 ID(v),即进来的边数。
- 顶点 v 的出度是以 V 为始点的有向边的条数,记作 OD(v),即发出的边数。
- 顶点 v 的度等于其入度和出度之和,即 。
综上
9). 路径、路径长度和距离
-
路径:
接续的边的顶点构成的序列。 -
路径长度:
路径上边或弧的数目。 -
距离:
从顶点到另一顶点的最短路径长度。
如图,V1 到 V4 的路径有两条。
- V
1、V3、 V4,路径长度为 2 - V
1、V4,路径长度为 1
V1 到 V4 的距离为 1。
注意:
在有向图中,路径必须沿着箭头方向走,无向图有边就能走。
10). 回路(环)、简单路径和简单回路
-
回路(环):
第一个顶点和最后一个顶点相同的路径。如 V1、V3、V4、V1,就是回路。 -
简单路径:
除路径始点和终点可以相同外,其余顶点均不相同的路径。V1、V3、V4、V1、V2不是简单回路(V1经历了两次),V1、V3、V4、V2是简单路径。 -
简单回路:
除路径始点和终点相同外,其余顶点均不相同的路径。V1、V3、V4、V1,就是简单回路。
11). 子图与生成子图
-
子图:
设有两个图 G=(V,E)、G1=(V1,E1),若 V1⊆V,E1⊆E,则称 G1 是 G 的子图。从图中选择若干个顶点、若干条边构成的图称为原图的子图。 -
生成子图:
从图中选择所有的顶点,若干条边构成的图称为原图的生成子图。
12). 连通图和连通分量
-
连通图:
在无向图
中,如果顶点 Vi到 Vj有路径,则称 Vi和 Vj是连通的。如果图中任何两个顶点都是连通的,则称 G 为连通图。 -
极大连通子图:
该子图是 G 的连通子图,如果再加入一个顶点(原图的顶点集中任何一个),该子图不连通。 -
连通分量:
无向图 G 的极大连通子图称为 G 的连通分量。 -
对于连通图,其连通分量就是它自己;对于非连通图,则有 2 个以上连通分量。
- 其中 V
4不是连通分量,因为它加个 V2所构成的图还是连通的。
13). 强连通图和强连通分量
-
强连通图:
在有向图
中,如果图中任何两个顶点 Vi到 Vj有路径,且 Vj到 Vi也有路径,则称 G 为强连通图。 -
极大强连通子图:
该子图是 G 的强连通子图,如果再加入一个顶点(原图的顶点集中任何一个),该子图不强连通。 -
强连通分量:
有向图 G 的极大强连通子图称为 G 的强连通分量。
14). 树和有向图
- 从图论的角度看,
树是一个无环连通图
。
一个含 n 个顶点、m 条边的图,只要满足下列五个条件之一就是一棵树:
- G 是连通图且 ;
- G 是连通图且无环;
- G 是连通图,但删除任意一条边就不连通;
- G 是无环图,但添加任意一条边就会产生环;
- G 中任意一对顶点之间仅存在一条简单路径。
有向树:
只有一个顶点入度为 0,其余顶点入度均为 1 的有向图。如图。
15). 生成树和生成森林
极小连通子图:
该子图是 G 的连通子图,在该子图中删除任何一条边,该子图不在连通。
-
生成树:
包含无向图 G所有顶点
的极小连通子图。 -
因为生成树包含所有顶点,因此只有连通图才有生成树,而非连通图,每一个连通分量会有一棵生成树。
-
生成森林:
对非连通图,由各个连通分量的生成树组成的集合。
16). 二分图
- 二分图,又称为二部图,是图论中的一种特殊模型。
设 G=<V,E> 是一个无向图
- 顶点集 V 可分割为两个互不相交的子集 V
1、V2 - 图中的每条边(i,j)所关联的两个顶点 i 和 j 分别属于这两个不同的顶点集(i⊆V
1,j⊆V2) - 称图 G 为二分图,如图。
下期预告:图的存储_邻接矩阵