【算法学习】--贪心、动态规划、分治的区别与应用

相同点:将问题划分为一个个子问题,然后通过解决这些子问题来解决最终问题。

1.分治算法:

  • 分解(Divide):将原问题分解成一系列子问题;
  • 解决(conquer):递归地解各个子问题。若子问题足够小,则直接求解;
  • 合并(Combine):将子问题的结果合并成原问题的解

应用:归并排序;

2.贪心算法:贪心算法中,是以自顶向下的方式使用最优子结构的。贪心算法会先做选择,在当时看起来是最优的选择,然后再求解一个结果子问题,而不是先寻找子问题的最优解,然后再做选择。

解动态规划问题一般是自底向上,从小子问题处理至大子问题。

条件:每一步的最优解一定依赖上一步的最优解。
方法:从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止

哈夫曼树,钱币组合,设置雷达问题;不能用来求最大最小解的问题;

 

3.动态规划算法:

  • 描述最优解的结构
  • 递归定义最优解的值
  • 按自底向上的方式计算最优解的值
  • 由计算出的结果构造一个最优解

条件:最优子结构;重叠子问题。
方法:自底向上构造子问题的解。

应用:子序列最大和问题,滑雪问题

为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。

分治法是指将问题划分成一些独立地子问题,递归地求解各子问题,然后合并子问题的解而得到原问题的解。与此不同,动态规划适用于子问题独立且重叠的情况,也就是各子问题包含公共的子子问题。

 

 

用表记录子问题的解的,就是动态规划。动态规划可以用递归和两层for循环来实现。

不用表记录子问题的,就是分治法。分治法只能用递归调用来实现。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值