大话数据结构笔记——第七章 图

1 图的定义

 

 

 1)各种图定义

 

 

 

 

 

 

 2)图的顶点与边间关系

 

 

 

 3)连通图相关术语

 

 

 

 

 

 4)图的定义与术语总结

2 图的抽象数据类型

3 图的存储结构

 

 1)邻接矩阵

 

 

 

 

 

 时间复杂度O(n)。

 2)邻接表

 

 

 

 

 3)十字链表

 

 4)邻接多重表

 

 

 

 5)边集数组

 

 

4 图的遍历

 1)深度优先遍历

 

 

 

 

 2)广度优先遍历

 

5 图的最小生成树

 

通过前面的学习,对于含有 n 个顶点的连通图来说可能包含有多种生成树,例如 1 所示:

普利姆算法(Prim):

先选中一个结点为一个整体,在剩下所有结点与该整体的所有边中选一条最短的边,将这条新出现边的一个顶点归入这个整体中,然后在新合成的整体与剩下的所有结点的所有边中选一条最短的边,将这条新出现边的一个顶点归入这个整体中,以此类推,直到所有结点遍历完。(以结点为目标构建最小生成树,适合边数多的稠密图)

【步骤】

(1)从图中选取一个节点作为起始节点(也是树的根节点),标记为已达;初始化所有未达节点到树的距离为到根节点的距离

(2)从剩余未达节点中选取到树距离最短的节点i,标记为已达;更新未达节点到树的距离(如果节点到节点i的距离小于现距离,则更新);

(3)重复步骤2直到所有n个节点均为已达。

克鲁斯卡尔算法(Kruskal):

在带权连通图中,不断地在边集合中找到最小的边,如果该边满足得到最小生成树的条件,就将其构造,直到最后得到一颗最小生成树。(以边为目标构建最小生成树,适合边数少的稀疏图)

【步骤】

(1)将所有边的边权从小到大依次排列,并且均标为未选

(2)选择最小的未选边

(3)如果该边与前面所选的边无法构成回路,则选中该边,并标为已选;如果该边与前面所选的边构成了回路,则不选该边,并标为已选

(4)重复(2)(3),直到所有点之间都有边相连;

 

 

 

6 最短路径

 

迪杰斯特拉算法(Dijkstra):

迪杰斯特拉最最朴素的思想就是按长度递增的次序产生最短路径。即每次对所有可见点的路径长度进行排序后,选择一条最短的路径,这条路径就是对应顶点到源点的最短路径。

迪杰斯特拉算法总共就干了两件事:

【1】不断运行广度优先算法找可见点,计算可见点到源点的距离长度

【2】从当前已知的路径中选择长度最短的将其顶点加入S作为确定找到的最短路径的顶点。

看完这段视频就可以清楚迪杰斯特拉算法的过程:迪杰斯特拉算法讲解

弗洛伊德算法(Floyd):

https://www.cnblogs.com/ssyfj/p/9495960.html

 

 

 

 

                 ········

 

7 拓扑排序

 1)拓扑排序介绍

 

 

 2)拓扑排序算法

 

 

 

 

8 关键路径

 

 

 1)关键路径算法原理

 2)关键路径算法

 

 

 

 

 

 

 

 

9 总结

 

猜你喜欢

转载自www.cnblogs.com/superjishere/p/12318047.html