码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-03-02 01:20:59      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:联系   递推   决策   几何   pos   blog   更新   计算   治法   

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

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

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

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

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

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

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

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

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

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

  • 等价转换:化繁为简。

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

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

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

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

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

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

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

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

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

标签:联系   递推   决策   几何   pos   blog   更新   计算   治法   

原文地址:https://www.cnblogs.com/MyNameIsPc/p/8491032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!