数据结构第六章-图
一、最小生成树应用:主要针对整个图的最小权值的应用,不像dijkstra和floyd算法是针对某条路径。
1、Prim算法:

算法描述:
从某一个顶点开始构建生成树,每次将代价最小的新顶点纳入生成树,直到所有顶点都纳入为止。
2、Kruskal算法:

每次选择一条权值最小的边,使这条边的两头连通(原本已经连通的就不选),直到所有结点都连通。
3、个人对以上两种算法的理解:
两者构建上的区别:Prim算法针对顶点,每次将新顶点加入集合,Kruskal算法针对边,每次将最小边加入集合。
两者构建时共同点:
加入的顶点或边都不能构成回路,否则就不是最小生成树。
二、最短路径问题:

1、BFS算法:
只针对无权图
2、Dijkstra算法:
基于贪心策略,初始时选择一个顶点加入集合,算出该点到除了集合中的点,其余各点的距离,选出最短距离,将构成最短距离的另一个点加入集合,然后继续算出集合中的点到各个点的最短距离,更新,一直到集合中包含所有点。
3、Floyd算法:
基于动态规划,建立一个矩阵,矩阵中每个顶点i,j信息代表顶点i到顶点j的最短距离,每次将一个新顶点加入,若最短距离变短,则在原来矩阵基础上更新矩阵信息。这使得,每次更新都代表这在原来基础上,则表明这是目前针对已经更新点的最短距离。(动态规划,下一步的最优路径建立在上一步,每次增加一个顶点就相当于更新最优路径,之后增加的顶点包含之前加入的顶点。)
三、AOV网应用:
拓扑排序
四、AOE网应用:关键路径
顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销。


本文来自博客园,作者:无主之地主人,转载请注明原文链接:https://www.cnblogs.com/l-yy/p/15339656.html

浙公网安备 33010602011771号