数据结构-图

来源:互联网 发布:免费java教程视频下载 编辑:程序博客网 时间:2024/06/15 21:47

1.最小生成树

prim算法:一开始集合U只有一个顶点u0,每次从U和V-U之间选一条代价最小的边u0v0,将v0并入U,直到U=V。设图中有n个顶点,每次得一个顶点,且每次得顶点都要求代价最小的边,所以时间复杂度为O(n^2)。与边数无关,因此适合求边稠密的图的最小生成树。

kruskal算法:每次选择代价最小的边,同时要求边的两个顶点落在不同的连通分量上。在选取最小代价的边时,至多对e条边各扫描一次,若用堆来存放网中的边,则仅需O(log e)的时间;又最小生成树最多也就e条边,所以总的时间复杂度为O(eloge)。

2.最短路径
dijkstra:从某个原点到其余各顶点的最短路径。初始时D[i]设为原点到i的直接路径长度,然后每次从D中的未确定最小值的集合中选择最小值,选到的就是这次可确定的最小值,同时更新其它未确定的值。O(n^2)

floyd:逐个顶点试探法,逐步试着在原路径中增加中间顶点,若加入后路径变短,则修改之。分别要尝试从n个顶点绕道,每尝试一个顶点,需要扫描整个矩阵,所以时间复杂度为O(n^3)

0 0