数据结构笔记——图

图(Graph)

——2017.12.23

一、 什么是图

  1. 表示多对多的关系

  2. 包含

a) 一组定点:通常用V(Vertex)表示顶点集合

b) 一组边:通常用E(Edge)表示边的集合
(v,w)∈E,无向边 <v,w>表示v指向w的边

  1. 无向图/有向图,带权重的图称为网络

二、 邻接矩阵表示

  1. 邻接矩阵

用一个长度为N(N+1)/2的一维数组存储

例题:有N个顶点的无向完全图有多少条边?N(N-1)/2

  1. 邻接点:有边直接相连的顶点

  2. 有向图的度
    出度:从该点出发的边数为出度,指向该点的边数为入度

三、 邻接表表示

  1. 邻接表

四、 图的遍历

  1. 深度优先搜索(Depth First Search)

  2. 广度优先搜索(Breadth First Search)

五、 最短路径

  1. 最短路径问题抽象:在网络中,求两个不同顶点之间的所有路径中边的权值之和最小的那一条路径

a) 第一个顶点为:源点

b) 最后一个顶点为:终点

  1. 问题分类

a) 单源最短路径问题:从某固定源除法,求其到所有其他顶点的最短路径
无权图/有权图

b) 多源最短路径问题:求任意两顶点间的最短路径

  1. 无权图的单源最短路径算法

按照递增的顺序找出到各个顶点的最短路

有权图的单源最短路算法

有权图的单源最短路亦被称为Dijkstra算法(单源最短路径),首先要声明这个算法无法解决含有负值圈的图

六、 最小生成树(Minimum Spanning Tree)

  1. 什么是最小生成树

a) 是一个无回路的树,|V|个顶点一定有|V|-1条边

b) 是生成树,|V-1|条都在图里

  1. 贪心算法

a) 什么是贪:每一步都是最好的

b) 什么是好:权重最小的边

c) 需要约束:

i. 只能用图里有的边
ii. 只能正好用掉|V|-1条边
iii. 不能有回路

d) Prim算法

e) Kruskal算法——将森林合并成书

七、 拓扑排序

  1. 什么是拓扑排序

a) 拓扑序:如果图中从V到W有一条有向路径,则V一定排在W之前。满足此条件的顶点序列称为一个拓扑序

b) 获得一个拓扑序的过程就是拓扑排序

c) AOV如果有合理的拓扑序,则必定是有向无环图

  1. 关键路径问题

a) 由绝对不允许延误的活动组成的路径

猜你喜欢

转载自blog.csdn.net/qq_38275125/article/details/82817244