算法复习提纲 2020/12/3
递归
- 递归关系
- 递归终止条件
适用于将问题不断减小并最终求出答案的过程,找出递归关系是难点,在找关系的时候可以尝试看看,n和n-1的关系,n-1和n-2的关系,逐渐确定是否能用递归解决,如果可以则找出递归关系
迭代
- 递推
- 倒推
蛮力
- 注意缩小范围,尽可能快速得到结果,减少不必要的操作
分治
- 将问题分为很多块,逐块解决,经典为二分法(特殊的按值二分)
贪心
- 局部最优策略能够导致全局最优解(经典背包问题)
动态规划
- 动态规划=贪婪策略+递推(降阶)+存储递推结果
- 贪婪策略、递推算法都是在线性地解决问题,而动态规划是全方位、全阶段地解决问题,可以通俗地说动态规划是“带决策的多阶段、多方位递推算法
回溯法
- 八皇后问题
TIPS
1.遇到要求连续取一段数的问题可以考虑用队列,满足条件则压入队列,不满足则将队首移除。(蜗牛旅行问题)
2.对于大量重复的计算可以考虑进行预处理,比如找质数,可以先将小于n的质数全部找出来,不然每次碰到一个数n,就循环去除比n小的数,看是否有余数来确定这个数是不是质数太麻烦,且消耗大。(找质数问题)
3.当问题解决前后是有关联的时候,找出这个关联式,往往可以根据关联式使用递推。(弹簧板,农场周围的道路问题)
4.解决思路有时候没有固定的方法和模板,要会针对问题所需的解决想出正确,简洁的解决思路