1. 动态规划与分治
动态规划(Dynamic Programming, DP)方法常常被用来寻找最优解。类似于分治策略,将原问题分解为子问题,然后对子问题进行求解,再子问题的解综合得到原问题的解。但是用递归的算法实现分治策略时,往往和大量重复求解子问题,导致了指数级的时间复杂度。有两种方法可以避免重复求解子问题,一是在递归求解的过程中,将子问题的解记录下来,后续遇到相同子问题时,在常数时间内取出该子问题的解即可;二是采用自底而上的求解,先求解最底层的子问题,逐步向上最后综合得到原问题的解答。两种方法都是以空间换时间(time memory trade-off)
斐波那契数列问题
f ( n ) = f ( n − 1 ) + f ( n − 2 ) f ( 0 ) = 1 , f ( 1 ) = 1 \begin{matrix} f(n)=f(n-1)+f(n-2) \\ f(0)= 1,~f(1)=1 \\ \end{matrix} f(n)=f(n−1)+f(n−2)