常用算法设计和优化策略(本蒟蒻不定期更新)

Posted PECHPO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用算法设计和优化策略(本蒟蒻不定期更新)相关的知识,希望对你有一定的参考价值。

常用算法设计和优化策略(本蒟蒻不定期更新)

下面是紫书上讲的常用算法设计策略和优化策略:

  • 分治法:将问题分成相同的独立子问题求解。拆分出的问题必须有最优子结构性质(子问题求出的是最优解)

  • 动态规划。本质是:对于一个问题,通过划分阶段,定义状态与状态间的关系,来分解问题。利用单阶段问题之间的联系,或者同一阶段状态之间的联系,一个一个阶段往下决策,最终解决问题。

    拆分出的问题必须满足最优子结构性质和无后效性(当前阶段以前的状态不会影响以后的状态,只与当前阶段有关)。动归的目的是避免重叠子问题。递推和递归(记忆化搜索)是实现动归的手段。

    注:DAG上的动归也是有阶段的。当前阶段的唯一状态就是这个点,上一阶段的状态是这个点的儿子(们)。不要以为有些动态规划是没有阶段的。

  • 贪心法:动态规划的一种,每个阶段只有一种状态。

  • 构造法:最朴素的方法。

  • 中途相遇法:一种枚举的方法。通常比多个相遇法还要优秀。

  • 问题分解:将两个不相关的问题剥离开来分别求解。

  • 等价转换:化繁为简。

  • 假设法:对于有对称性的问题,利用对称性避免讨论。

  • 使用数据结构:在不改变主算法的情况下加速算法。

  • 数形结合:将代数的关系转化成几何的关系。

  • 二分答案:将求某个最优值转化为判定最优值,也算在策略内。

  • 扫描法:带有顺序的枚举法,通常维护一些重要的量从而简化计算。

  • 枚举基准:寻找基于当前基准的最优值,再取所有基准的最值。

  • 滑动窗口:通过某个数据结构维护单调性,高效去除冗余状态。

各位dalao有什么想吐槽的请尽情砸向评论区~~

以上是关于常用算法设计和优化策略(本蒟蒻不定期更新)的主要内容,如果未能解决你的问题,请参考以下文章

《算法竞赛入门经典》之“算法设计与优化策略”

算法设计与优化策略——滑动窗口

《常用算法之智能计算 》:遗传算法

Java常用设计模式——策略模式

设计模式学习心得(持续更新)

掌握必要的技术列表-(不定期更新)