算法解题模板汇总

动态规划

“记住你之前做过的事”,如果更准确些,其实是 “记住你之前得到的答案”

  • 问题拆解,找到问题之间的具体联系
  • 状态定义,及子问题的解/答案
  • 递归方程推导/最优子结构,例dp[n]=dp[n-1] + 1
  • 实现

贪心算法

大事化小,小事化了。对于一个较大的问题,通过找到与子问题的重叠,把复杂的问题划分为多个小问题。并且对于每个子问题的解进行选择,找出最优值,进行处理,再找出最优值,再处理

  • 建立数学模型来描述问题
  • 将求解的问题分成若干个小问题
  • 对每一个子问题求解,得到局部最优解
  • 把每一个问题的局部最优解合并成原来问题的一个解
从某一个问题的初解出发
    while(能朝给定目标前进一步)
        do 
            选择当前最优解作为可行解的一个解元素
    由所有解元素组合成原来问题的一个解

滑动窗口算法

在给定特定窗口大小的数组或字符串上执行要求的操作。

  • 给定一个初始窗口,比如left=right=0
  • 不断增加right的值,进行某个操作,使窗口中的值都符合要求
  • 停止增加right的值,转而增加left的值,进行某个操作,使窗口中的值都符合要求
  • 直到达到数组/字符串的尽头

回溯算法

解决一个回溯问题,实际上就是一个决策树的遍历过程

  • 路径,已经做出的选中
  • 选中列表,你当前可以做的选择
  • 结束条件,到达决策树底层,没办法在做选择的条件
result = []
def backtrack(路径,选择列表):
    if 满足结束条件:
        result.add(路径);
        return
    for 选择 in  选择列表:
        排除不合法的选择

        做选择

        backtrack(路径,选择列表)

        回溯

模拟算法

根据题目给出的规则对题目要求的相关过程进行编程模拟。

你可能感兴趣的:(算法解题模板汇总)