图(Graph)
——2017.12.23
一、 什么是图
-
表示多对多的关系
-
包含
a) 一组定点:通常用V(Vertex)表示顶点集合
b) 一组边:通常用E(Edge)表示边的集合
(v,w)∈E,无向边 <v,w>表示v指向w的边
- 无向图/有向图,带权重的图称为网络
二、 邻接矩阵表示
- 邻接矩阵
用一个长度为N(N+1)/2的一维数组存储
例题:有N个顶点的无向完全图有多少条边?N(N-1)/2
-
邻接点:有边直接相连的顶点
-
有向图的度
出度:从该点出发的边数为出度,指向该点的边数为入度
三、 邻接表表示
- 邻接表
四、 图的遍历
-
深度优先搜索(Depth First Search)
-
广度优先搜索(Breadth First Search)
五、 最短路径
- 最短路径问题抽象:在网络中,求两个不同顶点之间的所有路径中边的权值之和最小的那一条路径
a) 第一个顶点为:源点
b) 最后一个顶点为:终点
- 问题分类
a) 单源最短路径问题:从某固定源除法,求其到所有其他顶点的最短路径
无权图/有权图
b) 多源最短路径问题:求任意两顶点间的最短路径
- 无权图的单源最短路径算法
按照递增的顺序找出到各个顶点的最短路
有权图的单源最短路算法
有权图的单源最短路亦被称为Dijkstra算法(单源最短路径),首先要声明这个算法无法解决含有负值圈的图
六、 最小生成树(Minimum Spanning Tree)
- 什么是最小生成树
a) 是一个无回路的树,|V|个顶点一定有|V|-1条边
b) 是生成树,|V-1|条都在图里
- 贪心算法
a) 什么是贪:每一步都是最好的
b) 什么是好:权重最小的边
c) 需要约束:
i. 只能用图里有的边
ii. 只能正好用掉|V|-1条边
iii. 不能有回路
d) Prim算法
e) Kruskal算法——将森林合并成书
七、 拓扑排序
- 什么是拓扑排序
a) 拓扑序:如果图中从V到W有一条有向路径,则V一定排在W之前。满足此条件的顶点序列称为一个拓扑序
b) 获得一个拓扑序的过程就是拓扑排序
c) AOV如果有合理的拓扑序,则必定是有向无环图
- 关键路径问题
a) 由绝对不允许延误的活动组成的路径