当前位置: 首页 > 知识库问答 >
问题:

带加权边的1/0背包变分

陈坚
2023-03-14

我目前正在研究一个路由问题(找到一个我想去的地方的子集[每个地方有一定的分数],同时不超过最大的旅行时间),并提出了1/0背包问题的变体,似乎解决了我最初的问题。

根据维基百科,1/0背包被描述为:

给定一组物品,每个物品都有质量和价值,确定集合中每个物品的数量,以便总重量小于或等于给定的限制,总价值尽可能大。

因此,对于每个项目,都有一个固定的重量(质量),当试图解决问题时,可以很容易地使用它,例如使用动态规划。

我对这个问题采取了完全错误的方法吗?你认为有更好的算法来解决这个问题吗?

共有1个答案

华子航
2023-03-14

首先,这个问题是NP难的。这里是从加权完全图中的最短哈密顿路到这一条的约简。给定一个图,我们可以将所有节点的值赋给1,然后对答案进行二分搜索。如果这个问题有一个多项式解,它可以判断是否有一条路径包含所有顶点,并且长度不超过给定值。这样,我们就可以在多项式时间内求解最短哈密顿路问题。在实践中,这意味着没有人知道你的问题的有效、正确的多项式解。

现在有两条路可走:

>

  • 如果顶点数很少(大约20个),可以用动态规划得到精确解。状态为(mask,last_vertex)。该值是访问掩码中的所有顶点并停止在last_vertex中所需的最短时间。此解决方案的时间复杂度为O(2^n*n^2)

    如果顶点数大得多,就可以找到近似解。实现这一目标的方法有很多:启发式算法、不同的贪婪算法、随机抽样和局部优化等。

  •  类似资料:
    • 我对这个问题有点困惑。作为算法帮助我找到最大的利润从袋。但是这个算法并没有告诉我我应该拿哪一个项目会让我的利润最大。例如 n=4项,背包的容量M=8,利润=[15,10,9,5],重量分别为w=[1,5,3,4],当我解决这个问题时,我得到最大的利润为29 这里是解决方案[http://www.mafy.lut.fi/study/DiscreteOpt/DYNKNAP.pdf] 但是我想知道我应该

    • 本文向大家介绍C中的0-1背包问题?,包括了C中的0-1背包问题?的使用技巧和注意事项,需要的朋友参考一下 背包是袋子。背包问题是根据物品的值将物品放入袋中的。目的是使袋子内的值最大化。在0-1背包中,您既可以放置物品也可以将其丢弃,没有将物品的某些部分放入背包的概念。 样本问题 重量分布 最大值为65,因此我们将项目2和3放入背包。 0-1背包问题计划 输出结果

    • 我写了一个背包类,我用它来解决背包算法。这个类正在使用动态规划算法来解决这个问题。 我在代码中实现了一些优化,因此我使用线性O(W)空间来找到最大值,但当我试图找到见证时,我仍然需要O(nW)空间来保持布尔表。 有人能告诉我,是否有可能找到背包容量最大、空间较小、复杂度与O(nW)相同的证据,这里W是背包容量。 如果您认为代码中可能还有更多优化,请也告诉他们。

    • 我正在为即将到来的测试复习,想知道是否有人能重述问题的b部分。这是从分发的复习表中得到的文本,但我不确定b部分到底在问什么。我更直截了当地猜测“生成一个不到0/1背包问题最优值1%的解”是什么意思。 b)[10pts]举了一个有两个对象的例子,说明对分数背包问题使用的相同的贪婪方法(略加修改,如果贪婪方法选择的最后一个对象不适合,则忽略它)得到的解不到0/1背包问题最优解的1%。

    • 在我为0/1背包和无界背包签出的所有DP解决方案中,解决方案方法总是这样定义的: 0/1背包:取第n项或不取第n项,使总价值最大化。例如,0/1背包 无界背包:将第n个物品视为最后挑选的物品,或(n-1)个物品视为最后挑选的物品,使总价值最大化。例如,无界背包 但无界背包也可以使用0/1背包的逻辑来解决,只需稍加调整。我的意思是,对于0/1背包,我们执行以下操作(使用第一个链接中的代码): 请注意

    • 本文向大家介绍解决0-1背包问题的C ++程序,包括了解决0-1背包问题的C ++程序的使用技巧和注意事项,需要的朋友参考一下 在0-1背包问题中,给出了一组项目,每个项目都有一个权重和一个值。我们需要确定要包含在集合中的每个项目的数量,以使总重量小于或等于给定的限制,并且总值尽可能大。 输入项 输出结果 算法 范例程式码 输出结果