归纳证明,背负式背包返回最优解

时间:2019-07-09 13:56:41

标签: dynamic-programming knapsack-problem induction

我必须通过归纳证明

如果w

产生背包问题的最佳解决方案(动态规划方法)

我知道数学归纳法是如何工作的,但是我仍然坚持如何通过本练习来完成它。 特别是归纳步骤。 我想,作为基本案例,我只有一个元素,只要这个元素的重量小于或等于背包的容量,我就接受它。 否则我会离开它。

任何帮助将不胜感激! 谢谢

2 个答案:

答案 0 :(得分:1)

要证明此算法的正确性,可以按照以下三个步骤进行操作

  1. 证明该算法产生了可行的列表:

因为该算法描述了我们将做出最大的选择,并且我们将始终做出选择,所以我们有一个可行的列表

  1. 证明该算法具有贪婪选择属性:

在这种情况下,我们想证明我们算法的第一选择可能是最优解决方案的一部分。

  1. 证明该算法具有最佳子结构:我们可以通过假设形成两个列表来实现:

U(最佳列表)和P(我们的算法选择的列表)。我们可以假设这两个列表在某些时候必须不同。设差异点为Uj和Pj(即在索引j之后,P将包含与U不同的对象,U在索引j处结束)。因为在P中仅通过选择最大的元素来选择,所以与U相同的元素数量最多可达j,因此Pj + 1将使背包溢出,否则我们将使最优解U更好,这是不可能的。因此,该问题具有最佳的子结构。

这样我们可以证明算法是正确的。

答案 1 :(得分:0)

如果问题可以分解为子问题,则它具有“最优子结构”,您可以使用递归找到子问题的最佳解决方案。您的问题具有最佳的子结构(任何DP可解决的问题也是如此!)。 here证明了使用归纳法,您的程序确实能产生最佳解决方案的证明。