数据结构之图形结构二

图形的遍历

图形遍历的方法有两种:深度优先遍历广度优先遍历算法

深度优先遍历有点相似于前序遍历:从图形的某一点开始遍历,被访问过的顶点就作上已访问的记号,接着遍历此顶点的全部相邻且未访问过的顶点中的任意一个顶点,并作上已访问的记号再已该点为新的起点继续进行深度优先的搜索。网络

注意了:这种图形遍历方法结合了递归和堆栈两种数据结构的技巧。数据结构


广度优先遍历遍历方式是队列和递归技巧来遍历,也是从图形的某一顶点开始遍历,被访问过的顶点就作上已访问的记号ide


生成树(Spanning Tree)

定义:一个图形的生成树以最少的边来链接图形中全部的顶点,且不形成回路的树状结构。(咱们会发现图的遍历结果就能够看成生成树序列)spa

若是使用深度优先遍历所产生的生成树就叫深度优先生成树。如果广度优先则叫作广度优先生成树排序

因此:一个图形一般具备不止一条生成树递归


MST生成树

给图的边加一个权重值,这叫作加权图,生成最小成本生成树是至关重要的队列

以贪婪法则为基础,求一个无向连通图的最小生成树的常见方法有:Prim's算法和Kruskal's算法事件

Prim's算法

产生U,V两个集合,从V-U集合里,找出V集合中每一步造成最小成本边的点,加入U,反复执行一样的步骤,直到U=V集合it

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网络

AOV网络是指在有向图形中的顶点表示一项工做,而边表示顶点之间的前后关系。
还有一个新名词AOE(Ativity On lEdge)。 所谓AOE是指事件(event)的行动(action)在边上的有向图
其中的顶点做为各“进入边事件”(imeident in edge)的聚集点,当全部“进入边事件”的行动所有完成后,才能够开始“外出地事件”(lneident out edge)的行动。

在AOE网络中会有源头顶点和目的顶点。从源头顶点开始计时执行各边上事件的行动,到目的顶点完成为止所需的时间为全部事做完成的总时间。 

熟悉一下概念:

关键路径

最先时间

最晚时间

关键顶点