计算机中级-数据库系统工程师-数据结构-图

一、图的定义
1. 图的定义
  • 组成要素: 图G由顶点集V和边集E组成,记作G=(V,E)。其中V是有限的非空顶点集合,E是用顶点对表示的边集合。
  • 表示方法: 数据结构中的数据元素用顶点表示,数据元素之间的关系用边表示。
  • 与树的区别: 树中结点只能与上一层的一个父结点和下一层的多个子结点相连,而图中允许任意两个顶点之间存在关联。
1)有向图
  • 边表示: 从顶点vi到vj的有向边表示为,vi称为弧尾,vj称为弧头。
  • 特点:⟨vi,vj⟩和⟨vj,vi⟩表示不同的边。例如顶点1到4的边和4到1的边是两条不同的边。
  • 示例: 图中顶点集V={1,2,3,4},边集E={⟨1,2⟩,⟨1,3⟩,⟨1,4⟩,⟨4,1⟩,⟨4,2⟩}。
2)无向图
  • 边表示: 顶点vi和vj之间的无向边表示为(vi,vj)。
  • 特点:(vi,vj)和(vj,vi)表示同一条边。
  • 示例: 图中顶点集V={1,2,3,4,5},边集E={(1,2),(1,3),(1,4),(2,3),(3,4),(3,5),(4,5)}。
二、图的相关概念
1. 完全图
  • 无向完全图: 具有n个顶点且每个顶点与其他n−1个顶点都有边相连的图。边数为。
  • 有向完全图: 具有n个顶点且任意两个不同顶点之间存在方向相反的两条弧的图。弧数为n(n−1)。
  • 推导过程: 无向完全图边数计算为1+2+...+(n-1)=;有向完全图在此基础上每条边变为双向,故乘以2。
2. 度
  • 定义: 与顶点相连的边的数量称为该顶点的度。
  • 示例: 有向图a中顶点1的度为4(相连边数),无向图b中顶点1的度为3。
3. 出度和入度
  • 定义: 仅适用于有向图,出度指从顶点出发的边数,入度指指向顶点的边数。
  • 示例: 有向图a中顶点1的出度为3(流向2、3、4),入度为1(来自4);顶点4的出度为2,入度为1。
4. 路径
  • 定义: 顶点序列中相邻顶点间存在边则构成路径,路径长度为经过的边数。
  • 无向图路径: 如1-4-5路径长度为2,1-2-3-5路径长度为3。
  • 有向图路径: 必须遵循边方向,如1→4→2是有效路径,但2→4不存在路径。
5. 子图
  • 定义: 若图G′的顶点集V′是G的顶点集V的子集,且边集E′是E的子集,则G′是G的子图。
  • 示例: 从无向图b中选取顶点{1,2,4}及其相连边{(1,2),(1,4)}可构成子图。
6. 连通图
  • 无向连通图: 任意两个顶点间都存在路径的无向图。如图b是连通图。
  • 强连通图: 有向图中任意两个顶点间双向都有路径。如图a不是强连通图(如顶点3无法到达其他顶点)。
7. 网
  • 定义: 边带权值的图称为网,权值可表示距离、成本等实际意义。
  • 应用: 如城市交通网中,顶点表示城市,边表示公路,权值表示里程或运输成本。
三、图的存储结构
1. 邻接矩阵表示法
1)邻接矩阵表示法定义
  • 表示原理:用n×n矩阵表示n个顶点的图,矩阵元素a_{ij}表示顶点vi到vj的边存在性
  • 元素取值:有边时a_{ij}=1,无边时a_{ij}=0,自环边(顶点到自身)恒为0
  • 存储内容:同时存储顶点集合和边集合,矩阵行/列对应顶点,元素值对应边
  • 有向图特点:矩阵不对称,a_{ij}与a_{ji}可能不同(如示例中a_{12}=1而a_{21}=0)
2)无向图的邻接矩阵表示法
  • 对称性:矩阵关于主对角线对称,a_{ij}=a_{ji}(如示例中a_{12}=a_{21}=1)
  • 对角线特征:主对角线元素均为0,表示无自环边
  • 空间效率:实际只需存储上三角或下三角矩阵即可完整表示图结构
3)网带有权值的图的邻接矩阵的表示
  • 权值表示:用矩阵元素直接存储边的权值(如a_{12}=5表示v1→v2权值为5)
  • 无穷大约定:无边时用∞表示(区别于普通图的0),自环边仍为0
  • 示例解析:图中a_{23}=4表示v2→v3权值为4,a_{32}=∞表示v3→v2无连接
2. 邻接链表表示法
1)邻接链表表示法定义
  • 组成要素:
    • 表头节点:包含顶点数据域(data)和指向第一条边的指针域(firstarc)
    • 表节点:包含邻接顶点编号(adjvex)、边信息(info)和下一条边指针(nextarc)
  • 存储方式:为每个顶点建立单链表,链表节点表示与该顶点直接相连的边/弧
2)无向图的邻接链表表示法
  • 链表构建:每个顶点的链表包含所有相邻顶点(如顶点1的链表包含2→3→4)
  • 对称关系:若顶点A的链表包含B,则B的链表必包含A(体现无向图特性)
  • 空间优势:相比邻接矩阵更节省空间,尤其适合稀疏图(边数远少于n^2的图)
3)有向图的邻接链表表示法
  • 方向性体现:链表仅存储以该顶点为起点的弧(如v0链表含1,2表示v0→v1和v0→v2)
  • 逆邻接表:额外建立的表存储以该顶点为终点的弧(如v0在逆邻接表中含3表示v3→v0)
  • 空链表情况:若顶点无出边(如示例v1),其链表为空
4)带权值的网的邻接链表表示法
  • 节点扩展:表节点增加权值存储域(如v0→v1节点存储权值8)
  • 表示方法:在adjvex后增加权值信息,形成三元组(邻接顶点,权值,下指针)
  • 示例解析:v2v_2v2链表中的"3,2"表示v2→v3权值为2,v3链表中的"0,5"表示v3→v0权值为5
四、知识小结

|--------|-------------------------------------------------------------------------|-------------------------------------------|------|
| 知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
| 图的定义 | 由顶点集合V和边集合E组成,分为有向图(边带方向)和无向图(边无方向) | 树与图的区别:树是分层结构,同一层/跨层节点无连接;图允许任意节点互联 | ⭐⭐ |
| 图的分类 | - 无向图:边无方向(圆括号表示边) - 有向图:边有方向(尖括号表示弧) - 网:边带权值(如距离/成本) | 完全图:无向完全图边数=𝑛(𝑛−1)/2;有向完全图弧数=𝑛(𝑛−1) | ⭐⭐⭐ |
| 图的相关概念 | - 度:顶点连接的边数 - 出度/入度(有向图):流出/流入的边数 - 连通性:无向图任意两点有路径=连通图;有向图=强连通图 | 路径长度:路径经过的边数(易混淆:有向图需方向一致) | ⭐⭐ |
| 图的存储结构 | - 邻接矩阵:𝑛×𝑛矩阵,元素值表示边存在/权值(无向图矩阵对称) - 邻接链表:为每个顶点建单链表,存储相邻顶点及权值(网需额外权值域) | 邻接矩阵 vs 邻接链表:稠密图用矩阵省空间;稀疏图用链表省时间 | ⭐⭐⭐⭐ |
| 应用示例 | 城市交通网用网表示(顶点=城市,边=公路,权值=里程/成本) | 关键算法关联:最短路径(Dijkstra)、最小生成树(Prim/Kruskal) | ⭐⭐⭐ |

相关推荐
Yzzz-F4 小时前
Problem - 2146D1 - Codeforces &&Problem - D2 - Codeforces
算法
Kk.08024 小时前
力扣 LCR 084.全排列||
算法·leetcode·职场和发展
@insist1234 小时前
网络工程师-VLAN 技术原理与配置指南(软考局域网核心考点)
网络·网络工程师·软考·软件水平考试
环黄金线HHJX.4 小时前
龙虾钳足启发的AI集群语言交互新范式
开发语言·人工智能·算法·编辑器·交互
Omics Pro4 小时前
虚拟细胞:开启HIV/AIDS治疗新纪元的关键?
大数据·数据库·人工智能·深度学习·算法·机器学习·计算机视觉
旖-旎4 小时前
分治(快速选择算法)(3)
c++·算法·leetcode·排序算法·快速选择
_日拱一卒5 小时前
LeetCode:合并区间
算法·leetcode·职场和发展
xiaoye-duck5 小时前
【C++:哈希表封装】哈希表封装 myunordered_map/myunordered_set 实战:底层原理 + 完整实现
数据结构·c++·散列表
汀、人工智能5 小时前
[特殊字符] 第3课:最长连续序列
数据结构·算法·数据库架构·图论·bfs·最长连续序列
少许极端5 小时前
算法奇妙屋(四十一)-贪心算法学习之路 8
学习·算法·贪心算法