首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >归纳法证明背包递推返回最优解

归纳法证明背包递推返回最优解
EN

Stack Overflow用户
提问于 2019-07-09 21:56:42
回答 2查看 759关注 0票数 0

我必须通过归纳法来证明

如果w< w_i,则Opt(i,w) = Opt(i-1,w),否则Opt(i,w) = max{ Opt(i-1,w),Opt( i-1,w- w_i) + w_i) }

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

我知道数学归纳法是如何工作的,但在这个练习中我被困在了如何做到这一点上。尤其是归纳步骤。作为基本情况,我想,我只有一个元素,只要这个元素的重量小于或等于我背包的容量,我就接受它。否则我就丢下它。

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

EN

回答 2

Stack Overflow用户

发布于 2019-12-02 03:10:20

要证明该算法的正确性,您可以执行以下三个步骤

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

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

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

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

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

U(最优列表)和P(我们的算法选择的列表)。我们可以假设这两个列表在某一时刻一定是不同的。设差异点为Uj和Pj (即在索引j之后,P将包含与U不同的对象,U结束于索引j)。因为在P中只选择最大的元素,并且元素的数量与U相同,所以Pj+1将溢出背包,或者我们将使最优解U变得更好,这是不可能的。因此,该问题具有最优子结构。

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

票数 1
EN

Stack Overflow用户

发布于 2019-07-12 20:41:48

如果一个问题可以分解为子问题,并且你可以使用递归找到子问题的最优解,那么这个问题就有“最优子结构”。你的问题有最优子结构(就像任何DP可解问题一样!)。使用归纳法证明你的程序确实会得到最优解的证据,可以在here找到。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56954248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档