【数据结构与算法】图的基本概念

57 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

🔥 本文由 程序喵正在路上 原创,在稀土掘金首发!
💖 系列专栏:数据结构与算法
🌠 首发时间:2022年11月26日
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🌟 一以贯之的努力 不得懈怠的人生

图的定义

GG 由顶点集 VV 和边集 EE 组成,记为 G=(V,E)G=(V, E),其中 V(G)V(G) 表示图 GG 中顶点的有限非空集;E(G)E(G) 表示图 GG 中顶点之间的关系(边)集合。若 V={v1,v2,...,vn}V=\{v_1, v_2, ... , v_n\},则用 V|V| 表示图 GG 中顶点的个数,也称为图 GG 的阶,E={(u,v)uV,vV}E = \{(u, v) | u \in V, v \in V\}, 用 E|E| 表示图 GG 中边的条数

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

无向图、有向图

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

image.png

上图可以表示为

G2=(V2,E2)G_2 = (V_2, E_2)

V2={A,B,C,D,E}V_2 = \{A, B, C, D, E\}

E2={(A,B),(B,D),(B,E),(C,D),(C,E),(D,E)}E_2 = \{(A, B), (B, D), (B, E), (C, D), (C, E), (D, E)\}

EE 是有向边(也称弧)的有限集合时,则图 GG 为有向图。弧是顶点的无序对,记为 <v,w><v, w>,其中 vwv、w 是顶点,vv 称为弧尾,ww 称为弧头,vwv、w 称为从顶点 vv 到顶点 ww 的弧,也称为 vv 邻接到 ww,或 ww 邻接自 vv<v,w>  <w,v><v, w>\ \neq\ <w, v>

image.png

上图可以表示为

G1=(V1,E1)G_1 = (V_1, E_1)

V1={A,B,C,D,E}V_1 = \{A, B, C, D, E\}

E1={<A,B>,<A,C>,<A,E>,<B,A>,<B,C>,<B,E>,<C,D>}E_1 = \{<A, B>, <A, C>, <A, E>, <B, A>, <B, C>, <B, E>, <C, D>\}

简单图、多重图

简单图 —— 不存在重复边;不存在顶点到自身的边

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

简单图和多重图也有无向图和有向图之分

顶点的度、入度、出度

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

在具有 nn 个顶点、ee 条边的无向图中,i=1nTD(vi)=2e\sum_{i=1}^{n}TD(v_i) = 2e,即无向图的全部顶点的度的和等于边数的 22

对于有向图:

  • 入度是以顶点 vv 为终点的有向边的数目,记为 ID(v)ID(v)
  • 出度是以顶点 vv 为起点的有向边的数目,记为 OD(v)OD(v)
  • 顶点 vv 的度等于其入度和出度之和,即 TD(v)=ID(v)+OD(v)TD(v) = ID(v) + OD(v)

在具有 nn 个顶点、ee 条边的有向图中,i=1nID(vi)=i=1nOD(vi)=e\sum_{i=1}^{n}ID(v_i) = \sum_{i=1}^{n}OD(v_i) = e

顶点-顶点的关系描述

  • 路径 —— 顶点 VpV_p 到顶点 VqV_q 之间的一条路径是指顶点序列 Vp,Vi1,Vi2,,Vim,VqV_p, V_{i_1}, V_{i_2}, \dots , V_{i_m}, V_q
  • 回路 —— 第一个顶点和最后一个顶点相同的路径称为回路或者环
  • 简单路径 —— 在路径序列中,顶点不重复出现的路径称为简单路径
  • 简单回路 —— 除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路称为简单回路
  • 路径长度 —— 路径上边的数目
  • 点到点的距离 —— 从顶点 uu 出发到顶点 vv 的最短路径若存在,则此路径的长度称之为从 uuvv 的距离;若从 uuvv 根本不存在路径,则记该距离为无穷(\infty
  • 无向图中,若从顶点 vv 到顶点 ww 有路径存在,则称 vvww 是连通的
  • 有向图中,若从顶点 vv 到顶点 ww和从顶点 ww 到顶点 vv 之间都有路径,则称这两个顶点是强连通的

连通图、强连通图

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

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

对于 nn 个顶点的无向图 GG

  • GG 是连通图,则最少有 n1n-1 条边
  • GG 是非连通图,则最多有 Cn12C_{n-1}^{2} 条边

对于 nn 个顶点的有向图 GG

  • GG 是强连通图,则最少有 nn 条边(形成回路)

子图

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

若有满足 V(G)=V(G)V(G') = V(G) 的子图 GG',则称其为 GG 的生成子图,也就是比如说一个子图中有原图的所有点,但少了一些边,那么可以说这个子图是原图的生成子图

连通分量、强连通分量

无向图中的极大连通子图称为连通分量,其中,极大连通子图是指子图必须连通,且包含尽可能多的顶点和边

有向图中的极大强连通子图称为有向图的强连通分量,其中,极大强连通子图是指子图必须强连通,同时保留尽可能多的边

生成树

连通图的生成树是包含图中全部顶点的一个极小连通子图(边尽可能少,但要保持连通)

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

生成森林

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

边的权、带权图/网

  • 边的权 —— 在一个图中,每条边都可以标上具有某种含义的数值,该数值称为该边的权值
  • 带权图/网 —— 边上带有权值的图称为带权图,也称为网
  • 带权路径长度 —— 当图是带权图时,一条路径上所有边的权值之和,称为该路径的带权路径长度

几种特殊形态的图

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

    • 若无向图的顶点数 V=n|V| = n,则 E[0,Cn2]=[0,n(n1)2]|E| \in [0, C_n^2] = [0, \frac{n(n - 1)}{2}]
  • 有向完全图 —— 有向图中任意两个顶点之间都存在方向相反的两条弧

    • 若有向图的顶点数 V=n|V| = n,则 E[0,2Cn2]=[0,n(n1)]|E| \in [0, 2C_n^2] = [0, n(n - 1)]
  • 边数很少的图称为稀疏图,反之称为稠密图,边数没有绝对的界限,一般来说 E<VlogV|E| < |V|log|V| 时,可以将 GG 视为稀疏图

  • 树 —— 不存在回路,且连通的无向图。对于 nn 个顶点的树,必有 n1n - 1 条边

  • nn 个顶点的图,若 E>n1|E| > n - 1,则一定有回路

  • 有向树 —— 一个顶点的入度为 00,其余顶点的入度均为 11 的有向图,称为有向树,有向树不一定是强连通图