算法学习之贪婪技术(贪心算法)

贪婪技术(贪心算法)

定义

贪婪法建议通过一系列步骤来构造问题的解,每一步对目前构造的部分解做一个扩展,直到获得问题的完整解为止。这个技术的核心是,所做的每一步选择都必须满足:

  • 可行的:即它必须满足问题的约束。
  • 局部最优:它是当前步骤中所有可行选择中最佳的局部选择。
  • 不可取消:即选择一旦做出,在算法的后面步骤中就无法改变了

理解

这种方法模式一般将求解过程分成若干个步骤,在每个步骤都应用贪心原则,选取当前状态下最好的或最优的选择(局部最有利的选择),并以此希望最后对跌出的结果也是最好的或最优的解。

贪心算法。动态规划法、分治法都是对问题进行分解,定义最优解的子结构.
贪心算法与其他方法最大的不同在于,贪心算法每一步做完之后,局部最优解就确定了,不再进行回溯处理,也就是说,每个步骤的局部最优解确定以后,就不再修改,直到算法结束。因为不会进行回溯,贪婪法只在很少的情况下可以得到真正的最优解,比如最短路径问题、图的最小生成树问题。
大多数情况下,贪婪法会错过真正的最优解,但是贪婪法简单高效,省去了为找最优解可能需要的穷举操作,可以得到与最优解比较接近的近似最优解,通常作为其他算法的辅助算法使用.

Prim算法(最小生成树)

Prim算法通过一系列不断扩张的子树来构造一棵最小生成树。我们从图的顶点集合V中任意选择的一个单顶点,作为序列中的初始子树。每一次迭代时,以一种贪婪的方式来扩张当前的生成树,即简单地把不在树中的最近顶点添加到树中。(我们所说的最近顶点,是指一个不在树中的顶点,它以一条权重最小的边和树中的顶点相连。而树的形状是无所谓的。)当图的所有顶点都包含在所构造的树中以后,该算法就停止了。
因为在每次迭代的时候,该算法只对树扩展一个顶点,这种迭代的总次数是n-1,其中n是图中的顶点个数。对树进行扩展时用到的边的集合用来表示该算法的生成树。

在这里插入图片描述

算法 Prim(G)
//构造最小生成树的Prim算法
//输入:加权连通图G=<V,E>
//输出:ET组成G的最小生成树的边的集合
VT←{
   v0}     // 可以用任意顶点来初始化树的顶点集合
ET←Ф
For i←1 to |V|-1 do
       在所有的边(v
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值