算法踩坑——动态规划
“算法的核心是数学逻辑,在数学层面分析问题、解决问题,至于使用哪种数据结构和编程语言实现,完全看个人兴趣。”
————踩坑小王子
能用动态规划解决的问题特点:
1.最优子结构
局部最优解能决定全局最优解
2.重复子问题
在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。
3.无后效性
子问题的解一旦确定,就不再改变,不受在这之后、包含它的更大的问题的求解决策影响
解决问题的核心步骤:
“从上到下分析问题(递归),从下到上求解问题(迭代)”
1.分解问题
问题的最优解往往与问题规模有关,将大问题规模分解为小问题规模,小问题规模分解为更小问题规模。
2.建立递推关系
找到大问题的最优解与小问题的最优解之间的递推关系,也称作状态转移方程。
3.求出初始值
初始值是采用递归方法求解问题的递归终点(递归出口),也是采用迭代方法求解问题的迭代起点(迭代入口)。
4.迭代求解
采用迭代方法求解问题,迭代的终点即为问题的最优解。