最小生成树算法:Kruskal与Prime

本文详细比较了Kruskal算法与Prim算法在求解最小生成树问题上的区别。Kruskal算法从边的角度出发,Prim算法则从顶点角度进行。Kruskal适用于边多的稀疏图,Prim则更适合点多的稠密图。两种算法在数据结构使用上也有所不同,Kruskal使用union-find,Prim则需维护一个堆。
部署运行你感兴趣的模型镜像

Kruskal与Prime的区别

Kruskal算法本质是贪心算法,而Prime算法是动态规划。
其实两者都是贪心的思想,只不过考虑的角度不同:

  • Prim算法从顶点的角度出发,每次选择距离当前节点最近的节点加入,直到所有节点都加入。
  • Kruskal算法从的角度出发,每次总是选择权重最小的边加入,直到加入n-1条边为止。(如果加入一条边后出现回路,skip这条边)。
    prim适合点多的稠密图,kruskal适合边多的。
    从代码实现的角度:
  • Prim算法需要维持一个数据结构(实际实现中用priority_queue比较多)
  • Kruskal算法需要union-find的数据结构。

Prim算法

该算法的时间复杂度为O(n²),与图中边数无关,该算法适合于点多的稠密图
基本思想:以为对象,挑选与点相连的最短边来构成最小生成树。
Prim算法:设图G =(V,E),其生成树的顶点集合为U。
①、把v0放入U。
②、在所有u∈U,v∈V-U的边(u,v)∈E中找一条最小权值的边,加入生成树。
③、把②找到的边的顶点v加入U集合。如果U集合已有n个元素,则结束,否则继续执行②。

Kruskal算法

该算法的时间主要取决于边数,它较适合于边多的稀疏图
基本思想:以边为对象,不断地加入新的不构成环路的最短边来构成最小生成树。
与Prim算法的不同之处在于,Kruskal在找最小生成树结点之前,需要对所有权重边做从小到大排序。将排序好的权重边依次加入到最小生成树中,如果加入时产生回路就跳过这条边,加入下一条边。当所有结点都加入到最小生成树中之后,就找出了最小生成树。

Kruskal与Prime原理

您可能感兴趣的与本文相关的镜像

AutoGPT

AutoGPT

AI应用

AutoGPT于2023年3月30日由游戏公司Significant Gravitas Ltd.的创始人Toran Bruce Richards发布,AutoGPT是一个AI agent(智能体),也是开源的应用程序,结合了GPT-4和GPT-3.5技术,给定自然语言的目标,它将尝试通过将其分解成子任务,并在自动循环中使用互联网和其他工具来实现这一目标

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值