数据结构之图的概念
数据结构之图的概念
图的基本概念
图的定义
图 $ G $ 由顶点集 $ V $ 和边集 $ E $ 组成,记为 $ G = (V, E) $。
顶点集 $ V $: 图 $ G $ 中顶点的有限非空集。记作 $ V = { v_1, v_2, , v_n } $,其中 $ |V| $ 表示图 $ G $ 中顶点的个数。
边集 $ E $: 图 $ G $ 中顶点之间的关系(边)集合。记作 $ E $,并用 $ |E| $ 表示图 $ G $ 中边的条数。边可以表示为顶点的有序对。例如,若 $ E = { (u, v) | u V, v V } $。
重要说明
- 图不可以是空图:图的顶点集 $ V $ 一定非空,但边集 $ E $ 可以为空。这意味着图可以存在仅有顶点而没有边的情况。
1. 有向图
定义: 若 $ E $ 是有向边(也称为弧)的有限集合,则图 $ G $ 为有向图。弧是顶点的有序对,记为 $ v, w $,其中 $ v $ 和 $ w $ 是顶点。
术语:
- $ v $ 称为弧尾(起点)。
- $ w $ 称为弧头(终点)。
- $ v, w $ 称为从 $ v $ 到 $ w $ 的弧,表示 $ v $ 邻接到 $ w $。
示例
有向图 $ G $ 可表示为:
$ G = (V, E) $
其中,
- 顶点集: $ V = { 1, 2, 3 } $
- 边集: $ E = { , 2 , , 1 , , 3 } $
2. 无向图
定义: 若 $ E $ 是无向边(简称边)的有限集合,则图 $ G $ 为无向图。边是顶点的无序对,记为 $ (v, w) $ 或 $ (w, v) $。在无向图中,顶点 $ v $ 和 $ w $ 互为邻接点。
术语: 边 $ (v, w) $ 依附于 $ v $ 和 $ w $,或称边 $ (v, w) $ 和 $ v, w $ 相关联。
示例
无向图 $ G $ 可表示为:
$ G = (V, E) $
其中:
- 顶点集: $ V $
- 边集: $ E = { (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4) } $
3. 简单图与多重图
简单图: 一个图 $ G $ 如果满足以下条件,则称为简单图:
- 不存在重复边。
- 不存在顶点到自身的边。
示例: 图 6.1 中的 $ G_1 $ 和 $ G_2 $ 均为简单图。
多重图: 若图 $ G $ 中某两个顶点之间的边数大于1条,且允许顶点通过一条边与自身关联,则称为多重图。多重图和简单图的定义是相对的。在数据结构中,仅讨论简单图。
4. 完全图
无向完全图: 对于无向图,边的取值范围为 $ 0 $ 到 $ $。有 $ $ 条边的无向图称为完全图。在完全图中,任意两个顶点之间都存在边。
有向完全图: 对于有向图,边的取值范围为 $ 0 $ 到 $ n(n-1) $。有 $ n(n-1) $ 条弧的有向图称为有向完全图。在有向完全图中,任意两个顶点之间都存在方向相反的两条弧。
示例: 图 6.1 中 $ G_1 $ 为无向完全图,而 $ G_2 $ 为有向完全图。
5. 子图
定义: 设有两个图 $ G = (V, E) $ 和 $ G' = (V', E') $,若 $ V' $ 是 $ V $ 的子集,且 $ E' $ 是 $ E $ 的子集,则称 $ G' $ 是 $ G $ 的子图。
生成子图: 若有满足 $ V' = V $ 的子图 $ G' $,则称其为 $ G $ 的生成子图。
注意事项
并非 $ V $ 和 $ E $ 的任何子集都能构成 $ G $ 的子图,因为这样的子集可能不是图,即子集中的某些边关联的顶点可能不在这个 $ V $ 的子集中。
6. 连通、连通图和连通分量
连通性: 在无向图中,若从顶点 $ v $ 到顶点 $ w $ 存在路径,则称 $ v $ 和 $ w $ 是连通的。
连通图: 若图 $ G $ 中任意两个顶点都是连通的,则称图 $ G $ 为连通图。否则,称为非连通图。
连通分量: 无向图中的极大连通子图称为连通分量。在图 6.2(a) 中,图 $ G $ 有 3 个连通分量,如图 6.2(b) 所示。
观察
假设一个图有 $ n $ 个顶点,如果边数小于 $ n-1 $,那么此图必为非连通图。
7. 强连通图与强连通分量
强连通性: 在有向图中,如果有一对顶点 $ v $ 和 $ w $,从 $ v $ 到 $ w $ 和从 $ w $ 到 $ v $ 之间都有路径,则称这两个顶点是强连通的。
强连通图: 若图中任意一对顶点都是强连通的,则称此图为强连通图。
强连通分量: 有向图中的极大强连通子图称为有向图的强连通分量。图 $ G $ 的强连通分量如图 6.3 所示。
观察
假设一个有向图有 $ n $ 个顶点,如果是强连通图,那么最少需要有 $ n $ 条边(每个顶点至少需要有一条边来保证连通性)。
8. 生成树与生成森林
生成树: 连通图的生成树是包含图中全部顶点的一个极小连通子图。若图中顶点数为 $ n $,则它的生成树含有 $ n-1 $ 条边。
- 特性: 对于生成树而言,若砍去它的一条边,则会变成非连通图;若加上一条边则会形成一个回路。
生成森林: 在非连通图中,连通分量的生成树构成了非连通图的生成森林。图 $ G $ 的一个生成树如图 6.4 所示。
9. 顶点的度、入度和出度
顶点的度: 在无向图中,顶点 $ v $ 的度是指依附于顶点 $ v $ 的边的条数,记为 $ TD(v) $。对于具有 $ n $ 个顶点和 $ e $ 条边的无向图,所有顶点的度之和等于边数的 2 倍,即:
$ _{v V} TD(v) = 2e $
入度和出度: 在有向图中,顶点 $ v $ 的度分为入度和出度:
- 入度: 以顶点 $ v $ 为终点的有向边的数目,记为 $ ID(v) $。
- 出度: 以顶点 $ v $ 为起点的有向边的数目,记为 $ OD(v) $。
在有向图中,顶点的度可以表示为:
$ TD(v) = ID(v) + OD(v) $
对于具有 $ n $ 个顶点和 $ e $ 条边的有向图,所有顶点的入度之和与出度之和相等,并且等于边数:
$ {v V} ID(v) = {v V} OD(v) = e $
10. 边的权和网
- 边的权值: 在一个图中,每条边可以标上具有某种含义的数值,该数值称为该边的权值。
- 带权图: 带有权值的图称为带权图,也称为网。
11. 稠密图与稀疏图
稀疏图: 边数很少的图称为稀疏图。稀疏和稠密本身是模糊的概念,通常当图 $ G $ 满足 $ |E| < |V| |V| $ 时,可以将 $ G $ 视为稀疏图。
稠密图: 边数较多的图称为稠密图。稠密图与稀疏图是相对的概念。
12. 路径、路径长度和回路
- 路径: 在顶点 $ v_1, v_2, , v_k $ 之间的一条路径是指顶点序列 $ v_1, v_2, , v_k $,关联的边也可理解为路径的构成要素。
- 路径长度: 路径上边的数目称为路径长度。
- 回路: 第一个顶点和最后一个顶点相同的路径称为回路或环。
- 环的存在: 若一个图有 $ n $ 个顶点,并且有大于 $ n-1 $ 条边,则此图一定有环。
13. 简单路径与简单回路
- 简单路径: 在路径序列中,顶点不重复出现的路径称为简单路径。
- 简单回路: 除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路称为简单回路。
14. 距离
- 最短路径: 从顶点 $ u $ 出发到顶点 $ v $ 的最短路径若存在,则此路径的长度称为从 $ u $ 到 $ v $ 的距离。
- 无路径情况: 若从 $ u $ 到 $ v $ 根本不存在路径,则记该距离为无穷大 (∞)。
15. 有向树
- 有向树: 一个顶点的入度为 0,其他顶点的入度均为 1 的有向图称为有向树。