Chapter 5 动态规划与贪婪策略
5.1 动态规划
5.2 0-1背包问题的动态规划算法
5.3 最长公共子序列问题的动态规划算法
5.4 贪婪策略
5.5 无向带权图的最小生成树
5.6 有向带权图单源最短路径
在第4章里我们看到,虽然回溯算法能解决大多数组合优化问题,但是由于回溯算法的运行时间是指数级的,当问题的解空间规模很大时,就会变得令人无法忍受。实践中,只有当解空间规模较小时,才会考虑运用回溯策略解决组合优化问题。然而,现实中却有很多组合优化问题等待我们去解决,大多数这样的问题的解空间是十分巨大的。目前为止,对大多数组合优化问题而言,还没有一个通用的多项式时间的算法。要想提高解决问题的算法效率,必须探索问题本身具有的特性,充分利用这些特性设计出高效的算法。本章讨论这样的两种策略。
5.1 动态规划
在解决问题4-12(三角形N-后问题)时我们采取了一种特殊的方法:将棋盘规模为N的问题看成是对规模为N-1的问题(称为原问题的子问题)的一个扩展(加一条底边或加一条腰)。利用子问题的解,得到原问题的解。也就是说,从一个规模足够小