数据结构第六章-图

一、最小生成树应用:主要针对整个图的最小权值的应用,不像dijkstra和floyd算法是针对某条路径。

1、Prim算法:

 

 算法描述:

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

 

2、Kruskal算法:

 

 每次选择一条权值最小的边,使这条边的两头连通(原本已经连通的就不选),直到所有结点都连通。

3、个人对以上两种算法的理解:

两者构建上的区别:Prim算法针对顶点,每次将新顶点加入集合,Kruskal算法针对边,每次将最小边加入集合。

两者构建时共同点:

加入的顶点或边都不能构成回路,否则就不是最小生成树。

 

二、最短路径问题:

 

 1、BFS算法:

只针对无权图

2、Dijkstra算法:

基于贪心策略,初始时选择一个顶点加入集合,算出该点到除了集合中的点,其余各点的距离,选出最短距离,将构成最短距离的另一个点加入集合,然后继续算出集合中的点到各个点的最短距离,更新,一直到集合中包含所有点。

3、Floyd算法:

基于动态规划,建立一个矩阵,矩阵中每个顶点i,j信息代表顶点i到顶点j的最短距离,每次将一个新顶点加入,若最短距离变短,则在原来矩阵基础上更新矩阵信息。这使得,每次更新都代表这在原来基础上,则表明这是目前针对已经更新点的最短距离。(动态规划,下一步的最优路径建立在上一步,每次增加一个顶点就相当于更新最优路径,之后增加的顶点包含之前加入的顶点。)

 

三、AOV网应用:

拓扑排序

 

四、AOE网应用:关键路径

顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销。

 

 

 

posted @ 2021-09-26 19:18  无主之地主人  阅读(49)  评论(0)    收藏  举报