贪婪算法在图中的应用(Prim算法,Kruskal算法,Dijkstra算法)实现

在传统贪婪算法中,采用逐步构造最优解的方法。在每个阶段,都做出一个看上去最优的决策(是局部最优解)。做出贪婪决策的依据称为贪婪准则( greedy criterion)。
 
贪心思想的本质是每次都形成局部最优解,就是每次都处理出一个最好的方案。即,贪婪法建议通过一系列步骤来构造问题的解,每一步对目前构造的部分解做一个扩展,直到获得问题的完全解为止
 
贪婪算法的核心为, 所做的每一步选择都必须满足
  1. 可行的:即它必须满足问题的约束。
  2. 局部最优:它是当前步骤中所有可行选择中最佳的局部选择。
  3. 不可取消:即选择一旦做出,在算法的后面步骤中就无法改变了。

Kruskal算法(稀疏图):

假设一个连通图G=(V,E),通过每次向T添加边来构建最小成本生成树T。按成本的非递减顺序选择要包含在T中的边(每次选取路径的最小值)。如果边不形成循环,则将其添加到T中。因为G是连通的,并且有n>0个顶点,所以将精确地选择n-1个边

eg(在不行成回路的情况下,每次选取最小权值):

原理:

为实现Kruskal算法,需要用到最小堆和并查集及数据结构。最小堆可以实现对边的权值得排序(也可以不用最小堆,只要将其排序即可)&#

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值