Java 最小硬币兑换或0-1背包

Java 最小硬币兑换或0-1背包,java,dynamic-programming,knapsack-problem,coin-change,Java,Dynamic Programming,Knapsack Problem,Coin Change,我有如下数据集: 长度:233333450560650780 限额:5400 现在我的问题是从长度设置的最高到最低中选择项目,以弥补限制或尽可能接近 我知道背包和最小硬币兑换都能解决我的问题。我想知道哪一个更好 请注意,硬币兑换使用贪婪算法,背包使用动态规划从我对你问题的理解来看,你似乎在争论你的问题是否可以用贪婪算法解决,或者它是否更像0-1背包问题,贪婪算法不会每次都给你最优解 以下是一些关于贪婪算法和0-1背包问题的背景信息: 为了扩展贪婪算法,它们的工作基础是,存在一些可供选择下一项的普

我有如下数据集:

长度:233333450560650780 限额:5400

现在我的问题是从长度设置的最高到最低中选择项目,以弥补限制或尽可能接近

我知道背包和最小硬币兑换都能解决我的问题。我想知道哪一个更好


请注意,硬币兑换使用贪婪算法,背包使用动态规划

从我对你问题的理解来看,你似乎在争论你的问题是否可以用贪婪算法解决,或者它是否更像0-1背包问题,贪婪算法不会每次都给你最优解

以下是一些关于贪婪算法和0-1背包问题的背景信息:

为了扩展贪婪算法,它们的工作基础是,存在一些可供选择下一项的普遍最优属性,并在局部工作。换句话说,对于贪婪算法,它必须具有贪婪选择属性和最优子结构,这意味着贪婪算法做出的第一个选择可以在最优解中选择,并且最优解包含其中较小子问题的最优解

另一方面,0-1背包问题不是一个可以贪婪地解决的问题。最明显的是,贪婪选择属性没有显示。没有一个属性可以根据off选择第一个和下一个项目;如果你选择最大的物品,可能是它恰好占用了太多的空间,没有较小的物品可以填满这个空间,而选择较小的物品则会完全填满背包。如果您先选择较小的物品,可能会导致您的背包现在有一个空间太小,无法填充较大的物品,而较早地选择其中一个较大的物品将完成背包

0-1背包是一个需要动态规划解决方案的问题,该解决方案以非局部和外行的方式运行,是一种优化的“蛮力”。换句话说,它可以被认为是递归之上的优化


您的问题是选择要完成的离散项目或接近最大长度限制的项目。

对我来说,这听起来很像0-1背包问题,如果你想要任何数据集的最优解,就不能用贪婪算法来解决这个问题

相反,我们希望使用动态规划,您可以看出,如果一个问题既有最优子结构又有重叠子问题,则可以通过这种方式解决

0-1背包问题显示出最优子结构,原因如下: 从n个项目和W个重量的数据集可以获得的最大值是:n-1个项目和W个重量的最大值,或者,n-1个项目和W个重量的最大值加上n的值。 这些子问题的每一个最优解都可以组合起来,为更大的问题创建最优解

由于以下原因,0-1背包问题也有重叠子问题
: 该问题的递归解决方案包括尝试n项的所有组合,并检查这些项的权重是否小于W,然后找到这些值的最大值。这本质上涉及大量重复工作,因此,尝试的每个项目组合都可以计算与以前在较少项目上计算的总数相同的总数,因此,使用简单的组合法,您可以看到时间复杂性变为阶乘

这就是为什么0-1背包问题和您的问题最好使用动态规划来解决的原因,因此您可以保存以前子问题的答案,并参考已计算的总和来解决依赖于重叠子问题答案的后续问题

-


谢谢你,祝你好运

根据我对你问题的理解,你似乎在争论你的问题是否可以用贪婪算法来解决,还是更像是0-1背包问题,而贪婪算法不会每次都给你最优解

以下是一些关于贪婪算法和0-1背包问题的背景信息:

为了扩展贪婪算法,它们的工作基础是,存在一些可供选择下一项的普遍最优属性,并在局部工作。换句话说,对于贪婪算法,它必须具有贪婪选择属性和最优子结构,这意味着贪婪算法做出的第一个选择可以在最优解中选择,并且最优解包含其中较小子问题的最优解

另一方面,0-1背包问题不是一个可以贪婪地解决的问题。最明显的是,贪婪选择属性没有显示。没有一个属性可以根据off选择第一个和下一个项目;如果你选择最大的物品,可能是它恰好占用了太多的空间,没有较小的物品可以填满这个空间,而选择较小的物品则会完全填满背包。如果您先选择较小的物品,可能会导致您的背包现在有一个空间太小,无法填充较大的物品,而较早地选择其中一个较大的物品将完成背包

0-1背包是一个需要动态规划解决方案的问题,该解决方案以非局部和外行的方式运行,是一种优化的“蛮力”。换句话说,它可以被认为是递归之上的优化


您的问题是选择要完成的离散项目或接近最大长度限制的项目。