常见术语中英对照
- 图:graph
- 子图:subgraph
- 导出子图/诱导子图/生成子图:induced subgraph (子图的所有节点之间的所有边都要继承)
- 有向图:directed graph
- 无向图:undirected graph
- 带权图:weighted graph
- 无权图:unweighted graph
- 稀疏图:sparse graph
- 稠密图:dense graph
- 顶点:vertex(vertices)
- 边:edge
- 端点:endpoint
- an edge joins its endpoints
- 邻接的:adjacent
- 邻接表:adjacency list(每个节点通过链表(linked list)存储其邻接的节点)
- 邻接矩阵:adjacency matrix
- 关联:incident
- A and B is incident on (A,B)
- (A,B) is incident on A and B
- 度:degree
- 路径:path
- a path contains vertices and edges
- a path has subpaths
- 简单路径:simple path
- 可达的:reachable
- u is reachable from v
- 回路/环:cycle
- 简单回路:simple cycle(没有重复的顶点)
- 无回路的/无环的:acyclic
- 有向无环图:directed acyclic graph
- 连通的:connected
- 连通图:connected graph
- 非联通图:disconnected graph
- 联通分量:connected component
图的两种常用表示
邻接表
使用一个数组表示顶点的集合,每个顶点引出一个链表,表示顶点关联的边。
- 存储的空间开销:
O
(
V
+
E
)
O(V+E)
O(V+E) 个存储单元
- O ( V + E ) O(V+E) O(V+E) 是 O ( ∣ V ∣ + ∣ E ∣ ) O(|V|+|E|) O(∣V∣+∣E∣) 的简写
- O ( V + E ) O(V+E) O(V+E) 的由来:顶点数组占用 ∣ V ∣ |V| ∣V∣ 个存储单元,而根据握手定理,所有链表节点加起来的个数一共是 2 ∣ E ∣ 2|E| 2∣E∣ 个,故一共 ∣ V ∣ + 2 ∣ E ∣ |V|+2|E| ∣V∣+2∣E∣ 个单元
- 这里的“存储单元”不是比特数,而是比特数的整数倍。
- 具体地说,比特位数 ≈ \approx ≈ l o g 2 log_2 log2(表示数字大小)
- 查找的时间开销:对顶点 u u u查找的开销为 O ( d e g r e e ( u ) ) O(degree(u)) O(degree(u))
- 邻接表用于稀疏图效果好
邻接矩阵
使用二维数组来表示,二维数组的值代表图的一条边。
- 存储的空间开销: O ( V 2 ) O(V^2) O(V2)个存储单元
- 查找的时间开销: O ( 1 ) O(1) O(1)
- 若为无向图,则为对称矩阵
- 更适合用于稠密图
无向图边数与度数的关系:握手定理
任意无向图中,所有顶点的度数之和等于边数的两倍。换句话说,对于一个无向图 G = ( V , E ) G=(V,E) G=(V,E),有 ∑ v ∈ V d e g r e e ( v ) = 2 ∣ E ∣ \sum\limits_{v\in V} degree(v)=2|E| v∈V∑degree(v)=2∣E∣。
有向图边数与度数的关系
任意有向图中,出度之和与入度之和都等于边数。即 ∑ v ∈ V i n − d e g r e e ( v ) = ∑ v ∈ V o u t − d e g r e e ( v ) = ∣ E ∣ \sum\limits_{v\in V} in-degree(v)=\sum\limits_{v\in V} out-degree(v)=|E| v∈V∑in−degree(v)=v∈V∑out−degree(v)=∣E∣。