我试图更全面地了解动态规划中最优子结构属性的使用,但我对为什么我们必须证明问题的任何最优解都包含子问题的最优解感到盲目。
证明问题的某些最佳解决方案具有此属性,然后用它来证明,由于我们的递归算法构建的解决方案至少与最佳解决方案一样好,因此它本身就是最佳的,这还不够吗?换句话说,我无法在我们的算法的正确性论证中发现我们需要所有最优解包含子问题的最优解。
澄清:
CLRS 对最优子结构的定义是:“如果问题的任何最优解都包含子问题的最优解,则该问题表现出最优子结构”。
为什么说“如果问题的某些最优解包含子问题的最优解,则问题表现出最优子结构”还不够?
algorithm optimization dynamic-programming proof-of-correctness