【发布时间】:2019-05-22 04:27:16
【问题描述】:
对一个非常新手的问题表示歉意,因为我无法从各种资源中找到答案。
在背包算法中,我们构造一个表,例如在https://www.geeksforgeeks.org/0-1-knapsack-problem-dp-10/
我在 Kleinberg 的书中读到了背包问题。根据我的理解,动态编程是将问题分解为重叠的子问题 - 但是,我已经在各种书籍/在线资源中看到此表用于解决背包问题。我似乎无法理解这张表是如何与动态编程相关联的?我们是否在此表中记住任何内容?在我看来,这是一个巧妙的背包解决方案,但不是动态编程解决方案。我看过视频和文本,他们通过使用表格或使用动态编程解决方案来解决问题,但似乎没有人提供两者之间的联系。
【问题讨论】:
-
观看 Erik Demaine 为 MIT OpenCourseWare 撰写的 Parenthesization, Edit Distance, Knapsack。他教如何在伪多项式时间内使用动态规划解决背包问题 - 从 43:15 开始。很棒的一课!
-
谢谢,但还没有得到我的答复。视频中没有桌子。关于视频中的解决方案,我找到了类似的解决方案,但是当输入如下时会发生什么:{(5kg, $4), (2kg, $2), (5kg,$4), (2kg, $3)} [ kg 是重量,$ 是价值]。在递归解决方案中,在每一步中,我们都必须探索每个子问题的树(我们可以记住它),否则如果我们按顺序进行,那么结果将是 4 美元,而不是 5 美元的最佳解决方案。
-
上例中背包容量为5kg。
标签: algorithm dynamic-programming knapsack-problem