常见的四个算法思想:动态规划、贪心、回溯、分治。
具有最优子结构:动态规划 VS 贪心
动态规划 | 贪心 | |
全局最优 | 局部最优 | |
做出的选择可能会改变 | 做出了选择不变 | |
在给出的公式里有max或者min |
其中动态规划又可分为线性动规,区域动规,树形动规和背包动规四类。
线性动规:拦截导弹,合唱队形,挖地雷,建学校,剑客决斗等
区域动规:石子合并,加分二叉树,统计单词个数,炮兵布阵等
树形动规:贪吃的九头龙,二分查找树,聚会的欢乐,数字三角形等
背包问题:0-1背包问题,完全背包问题,分组背包问题,二维背包问题,装箱问题,挤牛奶等
贪心:0-1背包问题,马踏棋盘,均分纸牌
回溯法:类似枚举的全局搜索。它会找到一个问题的所有可行解,选其中的最优解。
举例:图的深度优先遍历,n皇后
分治:将一个大问题分解成小问题再求解。同时小问题性质与原问题性质相同。
时间复杂度中通常有一个㏒n
举例:找出伪币,求最值,棋盘覆盖等