JAVA进步一点点--数据结构与算法(广搜)-- 最小生成树、dijkstra

最小生成树

定义:
 一个连通无向图G=(V,E)来表示,V是顶点的集合,E是边的集合。我们对于每条边(u,v)属于边的集合,w(u,v)是边的权重,我们希望找到一个无环子集,使得所有点连通,并且w(T)=∑w(u,v)最小。
  可以认为各个城市有多种修路方法,距离各不一样,从这些修路方法中找到一个使得修路的总和最小。

伪代码(框架)
摘自《算法导论4》
在这里插入图片描述
 寻找的安全边,其实就是分隔两个子集的轻量级边(最小边),不一定只有一条,因此不一定是只有一种最小生成树(贪心算法的体现->可以学习一下证明过程,有助于对贪心的理解)。
在这里插入图片描述
Kruskal算法和Prim算法
区别:
 Prim算法是直接查找,多次寻找邻边的权重最小值,基于一颗树,使用与点比较少的时候
而Kruskal是需要先对权重排序后查找的,基于多棵树,即森林,使用与点比较多的图
具体详解可以参考大神博客:
https://www.cnblogs.com/zhangming-blog/p/5414514.html

力扣练习时发现最小生成树的完整题目很少,或者就是会员题,但是kruskal算法需要判断集合是否是两个集合的并查集算法倒是很常用。
来题:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值