基础算法策略总结-分而治之,动态规划,贪心策略; 回溯法和分支定界;

最近在刷算法题目,突然重新思考一下大二时学习的算法分析与设计课程,发现当时没有学习明白,只是记住了几个特定的几个题型;现在重新回归的时候,上升到了方法学上了;感觉到了温故知新的感觉;以下总结自童咏昕老师的算法设计与分析课程和韩军老师的算法分析与设计课程;当我们遇到一个问题的时候,我们先想出一个简单的方法,可以之后再在这个方法的基础上进行优化;

小感悟:为什么一个问题很难?为什么研究一个科学问题的时候有很多细节的东西搞不清除,感到迷茫;我记得周礼栋老师在一次演讲中提到:当我们面临一个系统领域的问题时,问题很复杂,有很多细节的问题;我们首先应该理清问题之间的关系,提出问题的抽象;然后对每种情况,我们再进行更为细节的分析;记得陈海波老师在一次演讲中提到:系统问题虽然研究了很多年;但是当一种资源性能快速增长的时候我们就需要对传统研究提出新的思考,比如CPU增长速度高于内存时,出现了cache; SSD的出现,出现了很多针对于SSD的优化研究;NVM的出现,我们需要对传统的内存模型,系统软件进行思考;以前很多针对旧的硬件设计的软件,可能就不适合了;这样就能出一流的成果;作为学生,我们应该学会积累,我们不能想刚开始的时候就有一流的成果,如果没有,我们需要积累,寻找规律。当对一个行业有一个成体系的认识的时候,我们就能成为这个领域有话语权的人;不在当下,而在未来的某个时刻;当前,计算机领域很多有话语权的学者;都是有了很多年的积累;而且,每年的工作也都有延续;作为学生,我们不能为了科研而科研,我们要明白我们做事情的意义;面对一个新的事物,有很多科研究的问题,这个时候我们需要看到当前有哪些问题,哪些问题值得做,哪些问题可能花费同样的时间能产出成果;要学会取舍,学会选择;只有做一流问题的人,才能有一流的成果。当然我们也要和这些大牛学习,学习的过程不能盲目模仿,我们要明白这其中的规律,向优秀的人,比自己实力强的人多请教学习。

分而治之思路:(存在独立子问题,三个步骤都很重要)

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

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

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

贪心策略思路:(存在单一子问题,需要证明贪心策略正确性)

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

求解思路:

经典问题:

回溯法:一种优先搜索法,试探法;总体思想就是,在搜索空间树中,按照选择条件向前搜索(深度优先搜索),以达到目标(找到解空间树中满足约束条件的所有解);当搜索到某一步时,发现搜索选择并不优或达不到目标,就回退一步,重新选择(常常使用递归实现);递归实现有三个核心要点:递归出口,函数参数,处理过程。回溯法在求解0/1背包问题的时候,虽然回溯过程中的剪枝,减少了搜索空间;但是整个搜索按深度优先机械进行,是盲目搜索(不可预测本节点以下的节点如何进行);

分支限界法:即在搜索空间树中进行搜索(广度优先,最小耗费优先,最大效益优先方式搜索),以达到求解目标(在满足约束条件的解中,找出在某种意义下的最优解或者找出满足约束条件的解,剪枝的原因)。分支限界算法,首先是确定一个合理的限界函数,然后根据函数确定目标函数的上下界(该届在最优解情况下可更新);然后按照广度优先的策略遍历问题的解空间树,在某一分支上,依次搜索该结点的所有孩子结点,分别估算这些孩子结点的目标函数的可能取值(对于最小化问题估算结点的下界,对于最大化问题,估算该结点的上界);如果某个孩子结点的目标函数值超出了目标函数的界,则将其丢弃(限界),否则加入队列中;

其他算法思想:近似算法,随机算法和启发式算法;

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

回溯法参考链接:https://zhuanlan.zhihu.com/p/51882471 

猜你喜欢

转载自www.cnblogs.com/xuyaowen/p/dc-dp-greedy-backtracking-branch-and-bound.html