如何解决为什么 0/1 Knapsack 不是 Greedy Algorithm 的一部分,而 Fractional Knapsack 是?
我不明白。我真的没有。贪心算法对我来说,只关心:
- 将问题划分为阶段[子问题]
- 最大化/最小化或优化每个阶段的输出,而不考虑后期或其他任何阶段。
即使是 0/1 背包问题也可以使用相同的理论解决。
- 阶段成为各种要填充的项目
- 在每个阶段优化输出就是先选择利润最高的项目,然后再选择利润最高的下一个项目,依此类推。
我们在两个背包问题上都采用了相同的方法。唯一的区别是:
- 在部分背包中:我们通过选择提供最大利润/重量的项目来最大化利润。为什么?因为项目可以分割
- In 0/1 Knapsack :我们通过简单地选择提供最多利润的项目来最大化利润。由于物品不能分割,我们不考虑计算利润/重量,因为它没有区别。
它们都应该属于贪心算法。 我只是无法理解动态规划的概念从何而来。
解决方法
贪心算法不是把问题分成几部分来解决。
其实就是DP或者回溯。在 Greedy 中,我们选择目前我们拥有的最佳选项,然后选择并计算其余选项。最好的例子是 Dijkstra。
在 0/1 中,我们不知道哪个项目会给我们最大权重,因此我们必须尝试所有项目。为了避免重复计算相同的输入空间,我们存储了中间结果,这就是它属于DP的原因。
在部分背包中,我们基本上取当前重量最好的物品,选择它并计算剩余重量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。