您是否需要为动态编程背包排序输入

问题描述 投票:5回答:3

在每个例子中,我发现使用动态编程的1/0背包问题,其中项目具有权重(成本)和利润,它从未明确表示对项目列表进行排序,但在所有示例中,它们通过增加两者来排序重量和利润(较高的权重在示例中具有较高的利润)。所以我的问题是当从项目数组/列表中添加矩阵中的项目时,我可以按任何顺序添加它们,还是添加权重或利润最小的项目?因为从多个例子中我发现我不确定它只是巧合还是你确实需要每次都将最小的重量/利润放入矩阵中

dynamic-programming knapsack-problem
3个回答
3
投票

动态编程解决方案只是以有效的方式选择所有可能性(蛮力)(只需保存它们)...注意我们考虑所有子集...现在如果列表是否排序,则总数子集将是相同的,因为子集将是相同的,最后所有的子集都将被考虑..所以即使列表是任何顺序,或多或少,它不重要...


0
投票

也许您正在寻找自下而上的动态解决方案。当您使用自下而上的方法解决时,动态解决方案中有一个特征。

“第二种方法是自下而上的方法。这种方法通常取决于子问题的”大小“的一些自然概念,因此解决任何特定的子问题仅取决于求解”较小“的子问题。我们按大小排序子问题,解决它们的大小顺序,最小的。当解决特定的子问题时,我们已经解决了其解决方案所依赖的所有较小的子问题,并且我们已经保存了它们的解决方案。我们只解决了一次子问题,当我们第一次看到它时,我们已经解决了所有必备的子问题。“

来自,算法简介,CORMEN(第3版)


0
投票

不,您不需要对权重进行排序,因为每一行都会在该行的权重限制下给出最大可能值。最大值将出现在该行的最后一列中。

© www.soinside.com 2019 - 2024. All rights reserved.