基础算法策略总结-分而治之,动态规划,贪心策略

最近在刷算法题目,突然重新思考一下大二时学习的算法分析与设计课程,发现当时没有学习明白,只是记住了几个特定的几个题型;现在重新回归的时候,上升到了方法学上了;感觉到了温故知新的感觉;一下总结自童咏昕老师的算法设计与分析课程;

分而治之思路:(三部曲,都很重要)

  1. 分解原问题;(存在子问题,可以递归求解,子问题不重叠,子问题比原问题规模小)
  2. 解决子问题;
  3. 合并问题解;
  4. 经典问题:
    • 归并排序,最大子数组问题,逆序计数问题;
    • 快速排序,次序选择问题;

动态规划思路:(存在重叠子问题)

  1. 问题结构分析;(存在子问题,可以递归求解,子问题重叠,带有memo的递归求解,动态规划自底向上)
  2. 递推关系建立;
  3. 自底向上计算;(可以先用小规模数据找到求解规律,编程)
  4. 最优方案追踪;(根据求解的顺序,判断当前问题规模的解,来自于那个子问题)
  5. 经典问题:
    • 0-1背包问题(物品不可分割);最大子数组问题;
    • 最长公共子序列问题;最长公共子串问题;最小编辑距离问题;
    • 钢条切割问题;矩阵链乘法问题;

贪心策略思路:

  1. 提出贪心策略;
  2. 证明贪心策略正确;(数学归纳法或反证法)
  3. 经典问题:
    • 部分背包问题(物品可分割,可以按照价值和重量比来进行排序);
    • 霍夫曼编码问题;活动选择问题;

求解思路:

经典问题:

 保持更新,转载请注明出处;更多内容请关注cnblogs.com/xuyaowen;

猜你喜欢

转载自www.cnblogs.com/xuyaowen/p/dc-dp-greedy.html