简介:
一:图形简介
二:图的存储结构
三:图的遍历
四:最小生成树
五:最短路径
六:拓扑排序
七:关键路径计算
一:图形简介
图的定义:图是由“顶点 和“边“所组成的集合,通常用G=(V,E)来表示,其中V是所有顶点所组成的集合,而E代表所有边所组成的集合。图的种类有两种;一种是无向图,一种是有向图,无向图以(V1,V2)表示其边,而有向图则以<V1,V2>表示其边。
二:图的存储结构
图的存储结构:邻接矩阵、邻接表、邻接复合链表法、索引表格法等
2.1邻接矩阵
定义:以n*n的二维矩阵列表来表示
特性:对无向图而言,邻接矩阵一定是对称的,而且对角线一定是0。有向图则不一定如此。
缺点:空间浪费
2.2邻接表
定义:将一个n行的邻接矩阵,用n个链表表示
优点:相比较邻接矩阵,节省空间
缺点:增删改比较麻烦
三、图的遍历
图遍历的方法有两种:”深度优先搜索“和”广度优先遍历“
3.1深度优先遍历
深度优先遍历的方式类似于前序遍历;方法结合了递归和堆栈两种数据结构的技巧。
3.2广度优先搜索
广度优先遍历类似树的层序遍历;利用队列和递归技巧遍历
四、最小生成树
两种常用的构造最小生成树的方法——普利姆(prim)算法和克鲁斯卡尔(kruskal)算法
4.1Kruskal算法
Kruskal算法是将各边按权值大小从小到大排列,接着从权值最低的边开始建立最小成本生成的树,如果加入的边会造成回路则舍弃不用,直到加入了n-1个边为止。
4.2Prim算法
Prim算法,对一个加权图形G=(V,E),设V={1,2...n},假设U={1},也就是说,U和V是两个顶点的集合中找出一个顶点x,加入U集合中,反复执行同样的步骤,一直到U集合等于V集合(即U=V)为止。
五、最短路径
常见的方向有两种:单源最短路径、所有顶点对两两之间的最短路径
5.1单源最短路径
单源最短路径通常实用地接斯特拉(Dijkstra)算法
5.2所有顶点对两两之间的最短路径
两种方法:①重复执行Dijkstra算法n次;②采用弗洛伊德(Floyd)算法
Floyd图例:《图解数据结构》p241
六、拓扑排序
功能:将AOV网络中部分次序关系转换成线性次序的关系
排序步骤:
(1)寻找图中任何一个没有先行者的顶点。
(2)输出此顶点,并将此顶点的所有边全部删除。
(3)重复以上两个步骤处理所有的顶点。
七、关键路径
定义:AOE有向图从源头顶点到目的顶点之间,所需花费时间最长的一条有方向性的路径。
作用:关键路径乃是用来决定一个项目至少需要多少时间才可以完成。即在AOE中从源头顶点到目的顶点间最长的路径长度。