Kruskal与Prim算法的对比

Prim与Kruskal算法解析
本文详细介绍了Prim算法和Kruskal算法两种求解最小生成树的方法。Prim算法通过迭代方式逐步构建最小生成树,而Kruskal算法则通过排序边的权重并避免形成环路来构建最小生成树。

  Prim算法和Kruskal算法都能从连通图找出最小生成树。

 一、Prim算法:

  Prim算法将所有顶点分成两个部分A和B,A为目标集合,该算法可以看成是不断将B中顶点向A集合转移的过程,在该过程中,不断更新B中各顶点到A树的最短距离,并将其排序,按照贪心思想将具有最短路径并且不会产生回路的那个顶点从B中移向A中。 

    Prim算法实现的是找出一个有权重连通图中的最小生成树,即:具有最小权重且连接到所有结点的树。(强调的是树,树是没有回路的)。
    Prim算法是这样来做的: 
    首先以一个结点作为最小生成树的初始结点,然后以迭代的方式找出与最小生成树中各结点权重最小边,并加入到最小生成树中。加入之后如果产生回路则跳过这条边,选择下一个结点。当所有结点都加入到最小生成树中之后,就找出了连通图中的最小生成树了。

二、Kruskal算法:

Kruska算法将多有顶点分成N个部分,该算法可以看成是不断将N个部分进行合并的过程,在该过程中,先将多有的边按照权重进行排序,再按照贪心思想依次将具有最短权重且不会产生回路的顶点进行合并。 

    Kruskal算法与Prim算法的不同之处在于,Kruskal在找最小生成树结点之前,需要对所有权重边做从小到大排序。将排序好的权重边依次加入到最小生成树中,如果加入时产生回路就跳过这条边,加入下一条边。当所有结点都加入到最小生成树中之后,就找出了最小生成树。
   无疑,Kruskal算法在效率上要比Prim算法快,因为Kruskal只需要对权重边做一次排序,而Prim算法则需要做多次排序。尽管Prim算法每次做的算法涉及的权重边不一定会涵盖连通图中的所有边,但是随着所使用的排序算法的效率的提高,Kruskal算法和Prim算法之前的差异将会清晰的显性出来。

转载于:https://www.cnblogs.com/lab-hit/archive/2012/04/04/2431937.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值