14天阅读挑战赛
努力是为了不平庸~
算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算法的理解,同时吸收他人的奇思妙想,一起见证技术er的成长~
动态规划DP
“动态规划”,概述】
动态规划 (dynamic programming) 与分治方法相似,都是通过组合子问题的解来求解原问题(在这里, "programming"指的是一种表格法)
动态规划应用于子问题重叠的情况,即不同的子问题具有公共的子子问题(子问题的求解是递归进行的,将其划分为更小的子子问题),动态规划算法对每个子子问题只求解一次,将其解保存在一个表格中,从而无需每次求解一个子子问题时都重新计算,避免了不必要的计算工作。
什么时候考虑用动态规划
什么时候考虑动态规划/可以用动态规划求解的问题的特征/】应用动态规划方法求解的最优化问题应该具备的两个要素:最优子结构和子问题重叠。需要在给定约束条件下优化某种指标、问题可分解为彼此独立且离散的子问题时,考虑用动态规划算法。若一个问题的最优解,其内部包含的所有子问题解也必须最优,则该问题呈现了“最优子结构”,具有此结构特征的问题可能会使用动态规划。
极客时间
动态规划问题一定具备以下三个特征
1.重叠子问题:在穷举的过程中(比如通过递归),存在重复计算的现象;
2.无后效性:子问题之间的依赖是单向性的,某阶段状态一旦确定,就不受后续决策的影响;
3.最优子结构:子问题之间必须相互独立,或者说后续的计算可以通过前面的状态推导出来。
不理解这些题目为啥也符合以上特征:1049.最后一块石头的重量 II
求“最”优解问题(最大值和最小值):乘积最大子数组;最长回文子串;最长上升