数据结构与算法学习总结--贪心算法

如何理解贪心算法

贪心算法是指在对问题求解时,总是做出当前看来是最好的选择。由于不从整体考虑,所做出的是在某种意义上的局部最优解

贪心算法基本思想

从问题的某一个初始解出发,一步一步进行,根据某个优化测度,每一步都确保能获得局部最优解
每一步只考虑一个数据,若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据都枚举完,或者不能再添加时算法结束

贪心算法解决问题的步骤

  • 首先要能想到贪心算法

什么样的问题才适合使用贪心算法?
针对一组数据,定义了限制值和期望值,希望从中选取几个数据,在满足限制条件的情况下,期望值最大。

  • 尝试看用贪心算法能不能解决问题

每次都选择在当前情况下,在对限制值同等贡献量的情况下,对期望值贡献最大的数据

  • 举几个例子看贪心算法产生的结果是否是最优的

注:贪心算法不适用于前面的选择会影响后面的选择的情况

过程步骤:

1、建立数学模型来描述问题
2、把求解问题分成若干个子问题
3、对每一个子问题求解,得到子问题的局部最优解
4、把子问题的局部最优解合成原来问题的一个解

贪心算法经典应用

  • 霍夫曼编码 (Huffman Coding)
  • 最小生成树算法
  • 单源最短路径算法

注: 贪心算法实际的应用场景有限
学习贪心算法最有效的学习方法是多练习
贪心算法最难的是如何将要解决的问题抽象成贪心算法模型

常见面试考题

分苹果 :有m个苹果和n个孩子(m < n),m个苹果大小不同,n个孩子对苹果的大小需求不同,如何分配,让最多数量的孩子得到苹果

贪心算法和动态规划对比

  • 相同点

都是一种推导算法
都是分解成子问题来求解,都需要具有最优子结构

  • 不同点

1、贪心算法:每一步的最优解一定包含上一步的最优解,上一步之前的最优解不保存
动态规划:全局最优解一定包含某个局部最优解,但是不一定包含上一个局部最优解,因此需要记录之前所有的局部最优解
2、 贪心算法不能保证得到全局最优解,一般复杂度低,动态规划一定可以得到全局最优解,复杂度高

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值