算法(1) MST - 最小生成树

本文介绍了最小生成树的概念,包括Kruskal和Prim两种算法的详细步骤。Kruskal算法适用于点稠密图,Prim算法适用于边稠密图。最后,补充了图、连通图等相关定义。
摘要由CSDN通过智能技术生成

最小生成树

@(算法)

概念

生成树:

如果连通网G的一个子图是一棵包含G的所有顶点的树,则该子图称为G的生成树。

最小生成树:

在连通网G的所有生成树中,所有边的代价和最小的生成树,称为最小生成树。

这里写图片描述

Kruskal 算法

又称为加边法,将边排序后从小到大依次检查直到所有边都得到联通。这个方法因为只与边有关,所以适合点稠密图。
这里写图片描述

输入

点集合vextex, 边集合edge

算法步骤
  1. 将所有边按代价值从小到大排序,并初始化一个空点集A以及一个空边集B。
  2. 依次遍历所有边,若当前边中存在一个点不属于A,那么则将该边加入B,并将边的两点加入A;若当前边的两点都已加入A中,则跳过该边。
  3. 按2的做法,直到A=vextex结束。

Prim 算法

又称为加点法,任取一点后,通过这个点逐渐长出整个生成树,因为操作都和点相关,所以适合边稠密图。

输入

点集合vextex, 边集合edge

算法步骤
  1. 从vextex中任取一点u,并设置两个点集合, U=u,V=vextexu U = u , V = v e x t e x − u ,U表示已经成为最小生成树一部分的点集。
  2. 设置一个visited数组,用于表示哪些点已经加入到U当中(在python里我是用字典实现的,所以不需要这个数组),同时再设置一个cost数组,用于表示当前点连接到U上的代价。
  3. 通过U里面的点,先更新所有V里的点直接连接U里的点的代价,并记录到cost数组&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值