文章目录
重点
基本概念- 连通图、生成树
图的存储
①邻接矩阵
②邻接表
图的遍历 各自的时间复杂度分析、领接矩阵与领接表是否一样
- DFS
- BFS
应用
- 最小生成树
- 最短路径(单目标、单顶点之间、所有顶点之间)
学习目标
- 图结构是一种非线性结构,反映了数据对象之间的任意关系,在计算机科学、数学和工程中有着非常广泛的应用。
- 了解图的定义及相关的术语,掌握图的逻辑结构及其特点;
- 了解图的存储方法,重点掌握图的邻接矩阵和邻接表存储结构;
- 掌握图的遍历方法,重点掌握图的遍历算法的实现;
- 了解图的应用,重点掌握最小生成树、最短路径的基本思想、算法原理和实现过程。
1 图的基本概念
连通图与连通分量
强连通图与强连通分量
生成树
2 图的存储结构
2.1 领接矩阵
2.2 领接表
空间需求:O(n+2e)
空间需求:O(n+e)
空间需求:O(n+e)
存储结构
创建的时间复杂度:O(n+2e)
图的存储结构的比较——邻接矩阵和邻接表
其他
没讲
十字链表
邻接多重表
边集数组
3 图的遍历
DFS(深度优先搜索)
DFS可以用栈实现
算法
时间复杂度分析
空间复杂度分析
BFS(广度度优先搜索)
原理:
算法
时间复杂度分析
空间复杂度分析
4 最小生成树算法
Prim
Kruskal
5 最短路径算法
Dijkstra(单源最短路径问题)
迪杰斯特拉算法与Prim算法的相似之处
思想相似:都是使用贪婪和线性规划,每一步都是选择权值/花费最小的边。
贪婪:一个局部最有解也是全局最优解;
线性规划:主问题包含n个子问题,而且其中有重叠的子问题。
Dijkstra算法通过线性规划缓存了最优子路径的解,每一步也通过贪婪算法来选择最小的边。
Prim算法通过贪婪来选择最小的边,而Prim的每个子树都是最小生成树说明满足线性规划的两个条件。
Floyd(任意两个顶点之间的最短路径问题)
传送门
上一章:数据结构与算法 第三章 树
下一章:数据结构与算法 第五章 查找