具有附加属性的背包算法
Posted
技术标签:
【中文标题】具有附加属性的背包算法【英文标题】:Knapsack algorithm with an additional property 【发布时间】:2012-11-19 07:01:45 【问题描述】:当有 1 处房产时,我明白那里发生了什么。 当有超过 1 个属性时,我无法理解背包问题。
我必须编写一个使用具有 2 个属性的背包算法的程序。老师告诉我们,它必须在一个 3d 数组中完成。我无法想象这样的数组会是什么样子。
假设这是我的输入:
4 3 4 // number of records below, 1st property of backpack, 2nd property of backpack
1 1 1 // 1st property, 2nd property, cost
1 2 2 // 1st property, 2nd property, cost
2 3 3 // 1st property, 2nd property, cost
3 4 5 // 1st property, 2nd property, cost
输出看起来像这样:
4 // the cheapest sum of costs of 2 records
1 3 // numbers of these 2 records
输出说明: 2 组记录适合第一行输入:
(1) - 记录号 1 和记录号 3
1 1 1
+ 2 3 3
-------
3 4 4
(2) - 记录号 4
3 4 5
因为第一组记录是最便宜的(4
但现在,我只需要了解 3d 数组会是什么样子。你们中的一些人能帮我解决这个问题,并一层一层地展示,就像我的形象一样,这会是什么样子? 谢谢。
【问题讨论】:
我不确定我是否理解您的第一个数组。数组中的值是什么意思? 例如。在 V = 2 的背包和 V=1 的 1 2 个物品中,您最多可以放 2x V=1 物品。在 V = 3 的背包中,以及 V=1 和 V=1 的项目中,您可以最大限度地把这两个项目放在那里,所以它在那个单元格内是 v=2。在 v=3 和项目 1,1,2 的背包中,您最多可以放 2 个项目 (v=1,v=2),因此它给出 3。单元格内的值是背包的最大包装 我想你的老师在找multiple constraints knapsack problem @Paulina 我想我明白了。网格的列是用于后背的当前剩余体积(或其他属性)。这些行用于剩余可供选择的各种项目,按数量递增的顺序排序。假设我们有一个第 6 卷的背包。首先我们添加第 3 卷的项目,剩下的第 3 卷。然后我们查看第 3 列,我们将转到“2”行,因为我们已经使用了“ 3' 项目,我认为那个单元格应该是 '2'。我们添加“2”项,留下 1 的体积。在 1 列中,我们添加较低的“1”项,装满。我有这个权利吗? 是的 :P 你是对的 gmlobdell 【参考方案1】:假设你正在使用一个三维表:A[x][y][z]=k
,x
: sum 1st property; y
: 和第二个属性; z
: 和第三个属性; k:最小成本(最大奖励,我更喜欢使用奖励)
所以你迭代项目。假设当前项目是 (p1, p2, p3, reward) (reward = - cost)。对于每个(x,y,z,k)
,您的更新公式:
A[x+p1][y+p2][z+p3] = max(A[x+p1][y+p2][z+p3], A[x+p1][y+p2][z+p3] + reward)
如果 RHS 上的第 1 项更大,则在插槽 A[x+p1][y+p2][z+p3]
上,背包的配置保持静止;否则,您将使用A[x+p1][y+p2][z+p3]
加上当前项目的背包更新背包。
希望这能把事情弄清楚。
【讨论】:
【参考方案2】:你正在尝试做一些不可能的事情——那是你的问题。
当您增加维度数量时,您的项目会获得额外的属性。因此,您可以使用矩形边(prop1
x prop2
)或块边 (prop1
x prop2
x prop3
),而不是表格的左侧列边(prop1
)等等。但是现有的约束,定义表格的上排侧,应该具有相同的维度数。 不仅仅是一维!。因此,您将永远无法将二属性问题放入 3 维块中,而需要 4D 块。 3 个属性的 6D 块等等。
【讨论】:
你能解释一下什么是“附加属性”吗?该表是记录给定成本的背包的最佳配置。看来你的想法不同了。以上是关于具有附加属性的背包算法的主要内容,如果未能解决你的问题,请参考以下文章
如何在具有两个属性、每个属性的必要权重和最小总值的 3d 数组中实现背包算法?
背包问题基于matlab遗传算法结合贪婪算法求解背包问题含Matlab源码 791期