1.最优子结构
?组合优化问题,指的是问题有多个可行解,每一个可行解对应一个目标值,目的是要在可行解中求得目标值最优者(最大或最小)。
?最优子结构特性指的是问题的最优解包含的子问题的解相对于子问题而言也是最优的。
2.子问题重叠
?问题的一个递归算法在每个递归步骤产生分支子问题时并不总是新的,而是对部分子问题解了又解。当一个递归算法一次又一次地访问同一个子问题时,我们说该最优化问题具有重叠子问题的特性。
3.动态规划
?针对具有上述两个特征的优化问题,动态规划算法通常需要做如下的3步工作:
?(1)利用最优子结构定义一个关于解的目标值的递归方程。鉴于子问题的重叠性,如果自顶向下地用递归技术解每一个遇到的子问题,则可能陷入一个“时间黑洞”。
?(2)因此,动态规划以自底向上地对每个新产生的子问题仅解一次且将其解保存在一个表格中,需要时可以在表中查找,且能在常数时间内完成查找。
?(3)根据计算出的最优解的值构造对应的最优解。
参考:《算法设计、分析与实现:C、C++和Java》
时间: 2024-10-03 13:46:17