最小生成树——Kruskal和Prim算法的实现和总结

最小生成树概念

  1. 一个连通图生成树原图的极小连通子图,它包含原图中的所有n个顶点和使n个顶点连通的n-1条边。 这意味着对于生成树来说,若删除它的一条边,就会使生成树变成非连通图;若给它增加一条边,就会形成图中的一个回路。
  2. 一个连通图的生成树不是唯一的,使用不同的方法遍历图,可以得到不同的生成树;从不同的顶点出发,也可能得到不同的生成树;而且生成树有时还和图的存储结构中具体的结点顺序有关。
  3. 对于一个带权的连通图(即网络),如何找出一棵生成树,使得各边上的权值总和达到最小,这是一个有实际意义的问题。例如,在n个城市之间建立通信网络,至少要架设n-1条线路,这时自然会考虑:如何做才能使得总造价最少?在每两个城市之间都可以架设一条通信线路,并要花费一定的代价。若用图的顶点表示城市,用边表示两城市之间架设的线路,用边上的权值表示架设该线路的造价,就可以建立一个通信网络。对于这样一个有n个顶点的网络,可以有不同的生成树,每一棵生成树都可以构成通信网络。我们希望能够根据各条边上的权值,选择一棵总造价最小的生成树,这就是构造网络的最小(代价)生成树(Minimum-cost spanning tree)问题。

最小生成树的算法

  1. 有许多种方法可以构造最小生成树,比较典型的有两种:克鲁斯卡尔(Kruskal)算法和普里姆(Prim)算法,它们都采用了一种逐步求解的策略。
  2. 图7-18给出了一个连通网络及其邻接矩阵和它的一棵最小生成树。
    在这里插入图片描述

克鲁斯卡尔(Kruskal)算法

普里姆(Prim)算法

MSTKruskalPrim
复杂度分析O(E logE)O(V^2)
适用图(循环与边数有关)稀疏图(循环与顶点数有关)稠密图
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值