贪心分治动规总结

概念看不懂是正常的,看懂了才不正常。有个小建议:先看一下概念,看完之后肯定感觉似懂非懂,没关系去做题实践出真知,每个类型做个8、9题,在回过头来看概念会发现概念说的好像真是那么回事儿,接着再去做题反复练习就明白了。

一、基本概念

最优子结构:原问题的解包含子问题的解。(子问题即规模更小的问题)

例如,A--B--C,AB = 3,BC = 4,求A到C的最短距离。

显然答案是AB+AC = 7;AB的最短距离呢,等于3。

这就是原问题的解包含了子问题的解。

分治法思想:将原问题分解为若干个子问题,求解每个子问题,从而得到原问题的解。

子问题可以重叠也可以不重叠。

重叠举例:斐波那契数列

f(n) = f(n-1) + f(n-2)

f(n-1) = f(n-2) + f(n-3)

f(n-2) = f(n-3) + f(n-4)

可见f(n-1)与f(n-2)都是f(n)的子问题,但是在求解f(n-1)与f(n-2)的过程中都会求解f(n-3),这就是重叠子问题。

对于重叠子问题,我们一般采用动态规划来做,不是说分治法做不了,分治法有很多的重复计算,因此动态规划的效率高。

不重叠子问题举例:241. 为运算表达式设计优先级

先求运算符左右两边表达式的值,合并求原表达式的值,左表达式与右表达式显然是没有重叠部分的。

分治法的应用场景:具有最优子结构,但子问题不重叠的问题。

动态规划思想:问题具有最优子结构,记录每一个子问题的解,求解原问题就利用这些记录解。

可见动态规划擅长解决子问题重叠的问题,记录了子问题的解,避免了重复计算。但这并不是说动态规划不可以解决不重叠子问题,只是在解决不重叠子问题是不具有任何的优势。

动态规划应用场景:具有最优子结构,子问题重叠的二三维最值问题。

贪心思想:每一步选择对当前来说最好的选择,及贪心选择。但是每一步最优并代表全局最优。所以使用贪心算法要证明得到的结果是全局最优解。因此这也限制了贪心思想的应用范围。贪心思想要满足两个条件:其一、贪心选择可以得到全局最优解;其二,最优子结构。

贪心思想应用场景:最优子结构,满足贪心策略的一维最值问题。

总结:由此可见动态规划功能强大,只要满足最优子结构,它都能够解决只是效率问题而已,所以要重点理解掌握动态规划。

 二、题目练习

  1.  贪心习题小总结
  2.  分治法小结 
  3.  动态规划小结

 

 

 

 

posted @ 2019-12-02 13:28  卑微芒果  Views(207)  Comments(0Edit  收藏  举报