一、递归结构
递归是很有用的思想。把一个很复杂的问题使用同一个策略将其分解为较简单的问题,如果这个的问题仍然不能解决则再次分解,直到问题能被直接处理为止。
它的结构一般是这样的:
1.1 终结边界。 函数结束递归的出口
1.2 缩小问题规模。通过把问题转换对子问题的求解, 缩小规模。
由于1.2处理方式不同, 产生了不同的算法。比如动态规划,贪婪算法,分治算法等。
二、动态规划
缩小问题 = 若干个子问题解与当前若干路径的最优解。它最终解只包含一个子问题的解, 选择方式所有子问题解与当前路径运算得到的最优的子问题解。由于会重复计算参考我之前写的递归优化可以解决。
三、贪婪算法
缩小问题 = 当前最优+当前最优条件下的一个子问题解。最终解只包含一个子问题的解, 选择方式是当前路径最优。
四、分治算法
缩小问题 = 当前最优+当前最优条件下的一个子问题解。它会把所有子问题的解合并起来。