好久没更新博客,都长草了!!!
1.动态规划
动态规划通俗来讲就是一种分阶段解决问题的数学思想。如电视剧中佛门中人经常提及的一个思想:大事化小,小事化了。
举例如下:
有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。
解决方案:(1)暴力枚举(精力,时间多可以一试)
(2)动态规划思想:从后往前考虑,考虑最后一步到第10级,最后一步必然是从8级或者9级到10级。当1-9级有Y种走法,1-8级有X种走法时,此时10级台阶总的走法数量是X+Y。所以F(10)=F(9)+F(8),F(9)=F(8)+F(7),…,如此我们就是把一个复杂的问题不断的简化。
动态规划的三个重要概念:最优子结构,边界,状态转移公式。
上例子中,F(8)和F(9)是F(10)的最优子结构,边界是F(1)=1,F(2)=2;
状态转移公式是F(n)=F(n-1)+F(n-2).
2.贪心算法
比较通俗的理解是:把自己的工作做好,别人的我先不管。即:假设一个问题很复杂,暂时找不到全局的最优解,那么将原问题拆成几个小问题,分别进行求每个小问题的最优解,最后将这些最优解叠加起来作为整个问题的最优解