应用图解决现实问题是我们使用图这种数据结构的原因所在。 最小生成树是图的应用中很常见的一个概念,一个图的最小生成树不是唯一的,但最小生成树的边的权值之和纵使唯一的。最小生成树的算法主要有Prim算法和Kruskal算法。这两种算法都是基于贪心算法策略(只考虑眼前的最佳利益,而不考虑整体的效率)。 拓扑排序是指由一个有向无环图的顶点组成的序列,此序列满足以下条件:
Prim算法非常类似与寻找图的最短路径的Dijkstra算法。 算法思路:
Prim算法的时间复杂度是O(V*V),不依赖于E,因此他适合边稠密的图的最小生成树。
克鲁斯卡尔算法是一种按权值的递增次序选择合适的边来构造最小生成树的方法。 算法思路:
Kruskal的时间复杂度为O(Elog2E),因此此算法适合构造边稀疏而顶点稠密的图的最小生成树。
对一个AOV网进行拓扑排序的算法有很多,下面介绍一种。
由于输出每个顶点的同时还要删除以它为起点的边,故采用邻接表存储拓扑排序的时间复杂度为O(V+E)。采用邻接矩阵存储拓扑排序的时间复杂度是O(V*V)。 注;若一个顶点有多个直接后继,则拓扑排序的结果通常不唯一。