【数据结构】6——图1,概念
数据结构6——图1,概念
文章目录
- 数据结构6——图1,概念
- 基本概念
- 图的分类
- 图的表示方法
基本概念
由 顶点(Vertex) 和 边(Edge) 组成的集合。顶点表示图中的点,而边表示顶点之间的连接。记为 G = (V, E)
基本组件包括:
顶点(Vertex):图中的节点或点。每个顶点代表一个对象。
边(Edge):连接两个顶点的线段,表示它们之间的关系。边可以是有向的或无向的。
权重(Weight):有些图的边附带权重,表示边的成本、距离或其他量度。
-
邻接:有边连接的两个节点的关系
(i,j)没有先后顺序
<i,j>有先后顺序 -
关联:边和相连的节点的关系
-
顶点的度:关联边的数目
-
路径(Path):图中从一个顶点到另一个顶点所经过的顶点序列。
-
简单路径(Simple Path):路径中所有的顶点都不重复。
-
环(Cycle):路径的起点和终点相同,并且至少经过一个其他顶点。若图中存在环,称为有环图;否则称为无环图。
-
强连通图(Strongly Connected Graph):对于有向图,如果对于每一对顶点 u 和v,都存在从 u 到v 和从 v 到 u 的路径,则该图是强连通的。
-
生成树(Spanning Tree):一个无环的子图,包含图中的所有顶点,且是连通的。
-
生成森林(Spanning Forest):由多个生成树组成的集合,每个生成树包含图中一部分顶点。
-
子图(Subgraph):图中的一部分顶点和边的集合,这些顶点和边也构成一个图。
图的分类
-
无向图(Undirected Graph):图中的边没有方向,即如果顶点A与顶点B之间有一条边,那么它表示A和B之间是相互连接的。
-
有向图(Directed Graph):图中的边有方向,称为弧(Arc)。如果顶点A与顶点B之间有一条有向边,它表示从一个顶点指向另一个顶点的单向连接。
-
加权图(Weighted Graph):图中的边被赋予了权重(Weight),这些权重可以表示距离、成本、时间等。
-
无权图(Unweighted Graph):图中的边没有权重,或者所有边的权重相同。
-
简单图(Simple Graph):图中不包含重复的边,且不允许顶点与自己相连(自环)。
-
多重图(Multigraph):图中可以有多条边连接相同的一对顶点。
-
完全图(Complete Graph):图中的每对顶点之间都恰好有一条边。
-
稀疏图(Sparse Graph):边的数量远小于顶点对的数量。边很少
-
密集图(Dense Graph):边的数量接近顶点对的最大数量。
-
连通图(Connected Graph):在无向图中,如果任意两个顶点之间都存在路径,则称该图为连通图。在有向图中,如果任意两个顶点之间都存在方向路径,则称该图为强连通图。
-
网:边带权值的图
图的表示方法
- 邻接矩阵(Adjacency Matrix)
定义:一个二维数组 matrix[i][j] 表示顶点 i 和顶点 j 之间的边。如果 matrix[i][j] 非零,则存在边。
优点:快速查询是否存在边,适用于稠密图。
缺点:空间复杂度为 O(V^2),其中 V 是顶点数量,适用于大部分稠密图。
假设有一个无向图,包含 4 个顶点(A, B, C, D)和以下边:
A - B
A - C
B - C
C - D
A B C D
A [ 0, 1, 1, 0 ]
B [ 1, 0, 1, 0 ]
C [ 1, 1, 0, 1 ]
D [ 0, 0, 1, 0 ]
- 邻接表(Adjacency List),不唯一
定义:每个顶点维护一个列表,列出与其相邻的所有顶点。l链表
优点:节省空间,适用于稀疏图。
缺点:查询边的操作较慢,空间复杂度为 O(V + E),其中 E 是边的数量。
A: B -> C
B: A -> C
C: A -> B -> D
D: C
- . 边列表(Edge List)
边列表使用一个列表存储图中的所有边。每个元素是一个元组,表示一条边及其两个端点。
[(A, B), (A, C), (B, C), (C, D)]