图形的遍历
图形遍历的方法有两种:深度优先遍历和广度优先遍历
深度优先遍历有点类似于前序遍历:从图形的某一点开始遍历,被访问过的顶点就做上已访问的记号,接着遍历此顶点的所有相邻且未访问过的顶点中的任意一个顶点,并做上已访问的记号再已该点为新的起点继续进行深度优先的搜索。
注意了:这种图形遍历方法结合了递归和堆栈两种数据结构的技巧。
广度优先遍历遍历方式是以队列和递归技巧来遍历,也是从图形的某一顶点开始遍历,被访问过的顶点就做上已访问的记号
生成树(Spanning Tree)
定义:一个图形的生成树以最少的边来连接图形中所有的顶点,且不造成回路的树状结构。(我们会发现图的遍历结果就可以当作生成树序列)
如果使用深度优先遍历所产生的生成树就叫深度优先生成树。若是广度优先则叫做广度优先生成树
所以:一个图形通常具有不止一条生成树
MST生成树
给图的边加一个权重值,这叫做加权图,生成最小成本生成树是相当重要的
以贪婪法则为基础,求一个无向连通图的最小生成树的常见方法有:Prim's算法和Kruskal's算法
Prim's算法
产生U,V两个集合,从V-U集合里,找出V集合中每一步形成最小成本边的点,加入U,反复执行同样的步骤,直到U=V集合
Kruskal's算法
Kruskal算法是将各边线按照权值大小由小到大排列,接着从权值最低的边线开始建立最小成本生成树,如果加入的边线会造成回路则舍弃不用,直到加入了n-1个边线为止
图形的最短路径
单点对全部顶点:Dijkstra算法
顶点两两之间的最短距离:Floyd算法
AOV网络与拓扑排序
网络图形常用于规划大型项目,我们称用图形顶点来代表一项工作的网络为顶点活动网(简称AOV网络)
拓扑排序与拓扑次序:如果在AOV网络中,具有部分次序的关系(即有某几个顶点为前驱),拓扑排序的功能就是将这些部分次序(Partial Order)的关系,转换成线性次序(Linear Order)的关系。
例如i是j的前驱,在线性次序中,i仍排在j的前面,具有这种特性的线性次序就称为拓扑次序(Topological Order)。
下面我们为拓扑排序与拓扑次序进行摘要性的说明:1.产生拓扑次序必须存在的条件是一个无回路的图形,由于AOV网络代表各项小工作的先后完成顺序图,所以没有循环工作的问题,也就是说AOV网络经过拓扑排序后可以产生有线性次序关系的拓扑次序。
2.在一个AOV网络经过拓扑排序后所产生的拓扑次序可能有一个以上,亦即拓扑次序并不是唯一的。
如果同时有两个顶点没有前驱顶点,那结果就不是唯一解。
另外如果每一个顶点网络都有前驱,那表示此网络含有回路即有环,则无法进行拓扑排序。
AOE网络
其中的顶点作为各“进入边事件”(imeident in edge)的汇集点,当所有“进入边事件”的行动全部完成后,才可以开始“外出地事件”(lneident out edge)的行动。
熟悉一下概念:
关键路径
最早时间
最晚时间
关键顶点