分治
三个步骤:
- 分解:将原问题分解为若干相同结构的子问题;
- 解决:递归求解所有子问题;
- 合并:将子问题的解合并为原问题的解。
递归
要理解递归,你要先理解递归,直到你能理解递归。
重要概念:
- 递归边界
- 递归式
思想:找出问题表达式f(n)
与f(n-k)
之间的关系,同时计算f(1)
值,其中f(1)
值代表问题初始解,k
值视情况而定。
举例:n 的阶乘、爬 n 阶楼梯、斐波那契数列
暴力法
不使用优化算法(剪枝等)、直接用朴素算法(枚举所有情况,然后判断每一种情况是否合法)来解决问题。
举例:全排列、n 皇后问题
回溯法
一般来说,如果在到达递归边界前的某层,由于一些事实导致已经不需要往任何一个子问题递归,就可以直接返回上一层。
举例:n 皇后问题