图的最小生成树

一、克鲁斯卡尔算法

克鲁斯卡尔算法的核心思想是:每次添加权值尽可能小的边,同时使新的图无环,直到得到生成树为止。也称为“最小边加入法”“避圈法”

思路:对于带权图G(V,E),首先将图G中的边按权值排序,并将其中权值最小的边选出并标记,如果最小权值的边有多条,则可以随机从中选择一条。然后从未标记的边中选出权值最小的的边并做检查,检查该边是否与已经标记的边构成圈。如果是,则废弃它重新选择一条权值最小的边并检查,一到到找到一条与已标记的边不会构成圈的权值最小的边,然后标记成为最小生成树的一部分。

克鲁斯算法时间复杂度为O(eloge)e为网中边的数目,因而克鲁斯算法适合于求边稀疏的网的最小生成树

二、普里姆算法

对于连通带权图G(V,E),最小生成树为T,过程为:

首先,从图中随意选择一点作为起始点,并将其标记后加入集合U中,即U={u0}。然后算法重复执行操作为所有u属于U,v属于(V-U)中找一个代价最小的边(u0,v0)并入集合T,同时将v0并入U,直到U=V为止。

例:用普里姆算法求图1G所示的最小生成树

图的最小生成树 - 枫叶 - 枫叶
首先,算法选择顶点4作为起始点,将4放入U中,然后在剩余的G中选择一个顶点v0使边(4,v0)权值最小,选择顶点2,则U中为{4,2}
再从剩余的顶点中选一个顶点v1使边(u,v1)的权值最小,u属于{4,2},可供选择的有(2,1),(2,3),(2,6),(4,6)选择顶点顶点6,则U为{4,2,6}
再从剩余的顶点中选 一个v2使边(u,v2)的权值最小,此时可供选择的有(2,1),(2,3),(6,3),(6,5),选择顶点1,则U为{4,2,6,1}
依次,直到将所有的顶点添加到U中得到最小生成树,如下图
图的最小生成树 - 枫叶 - 枫叶
普里姆算法的时间复杂度为O(n^2),与网中的边数无关,适用于求边稠密的网的最小生成树
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值