图Graph

由顶点集合和边集合组成,表示对象之间的连接关系。

核心约束
每条边的端点属于顶点集合;方向、权重、自环和重边的约定需一致。
适用问题
计算依赖、通信拓扑、状态关系。
边界与取舍
图的存储表示与在图上运行的遍历、路径算法应分别选择。
ABCD
有向图示例:A 连向 B、C,B、C 连向 D。此例是 DAG;一般图可以有环,也可以是无向图。

常见操作#

V 为顶点数,E 为边数,deg(v) 为顶点 v 的度。

操作时间复杂度条件与说明
判断两点之间是否有边邻接矩阵 O(1)O(1);邻接表 O(deg⁡(v))O(\deg(v))邻接表按线性列表保存邻居;若用哈希邻居集合,成本不同。
枚举一个顶点的邻居邻接表 O(deg⁡(v))O(\deg(v));矩阵 O(V)O(V)矩阵需扫描一行,邻接表只访问已存在的邻接项。
插入一条边矩阵 O(1)O(1);列表尾插摊还 O(1)O(1)顶点已存在;列表不额外检查重复边。
遍历整张图邻接表 O(V+E)O(V+E);矩阵 O(V2)O(V^{2})可按 BFS 或 DFS 访问;非连通图需从未访问顶点继续。

时间与空间#

时间复杂度
取决于邻接表示和所需操作
存储空间
邻接表 O(V+E)O(V+E);邻接矩阵 O(V2)O(V^{2})

图是关系模型,具体性能来自表示。无向图邻接表通常把每条边保存两次,不改变渐进界。

工程中的应用#

6 个案例 · 附源码
基础原理参考资料

Open Data Structures · AdjacencyLists邻接表的存储与边操作。

Open Data Structures · AdjacencyMatrix邻接矩阵的查询和空间成本。

4 个概念