Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 具有附加性质的背包算法_Algorithm_Knapsack Problem - Fatal编程技术网

Algorithm 具有附加性质的背包算法

Algorithm 具有附加性质的背包算法,algorithm,knapsack-problem,Algorithm,Knapsack Problem,当有一处房产时,我知道里面发生了什么。 当有超过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

当有一处房产时,我知道里面发生了什么。 当有超过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<5),所以我们选择了它。我不仅要找出这组记录是否存在,还要找出我总结的记录

但现在,我只需要了解,3d阵列会是什么样子。你们中的一些人能帮我解决这个问题吗?一层一层地展示,就像在我的图片中一样,这是什么样子? 谢谢


你在试图做一些不可能的事情,这是你的问题


当您添加维度数量时,您的项目将获得其他属性。因此,不是表的左栏边(
prop1
),而是矩形边(
prop1
x
prop2
)或块边
(prop1
x
prop2
x
prop3
)等等。但是,定义表的上一行的现有约束应该具有相同数量的维度不仅仅是一个维度。所以,你将永远不能把两个属性问题放到一个三维块中,你需要4D块。用于3个属性等的6D块

假设您使用的是三维表:
a[x][y][z]=k
x
:求和第一个属性<代码>y:第二个属性的总和<代码>z:第三个属性的总和;k:最小成本(最大报酬,我更喜欢使用报酬)

因此,您可以对项目进行迭代。假设当前项目是(p1、p2、p3、奖励)(奖励=-成本)。对于每个
(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上的第一项较大,则在插槽
A[x+p1][y+p2][z+p3]
上,背包的配置保持不变;否则,您将使用
A[x+p1][y+p2][z+p3]
加上当前物品的方法更新背包


希望这能澄清问题。

我不确定我是否理解您的第一个阵列。数组中值的含义是什么?例如,在V=2的背包和V=1的12件物品中,最多可以放置2件V=1的物品。在V=3的背包中,对于物品V=1和V=1,你可以最大限度地把这两个物品都放在那里,所以它的V=2在这个单元格中。在v=3和物品1,1,2的背包中,你最多可以放2件物品(v=1,v=2),所以它给出了3。单元格内的值是背包的最大包装我想你的老师在找@Paulina我想我明白了。网格的列用于backback的当前剩余卷(或其他属性)。这些行用于剩余的各种可供选择的项目,按递增的卷顺序排序。假设我们有第六卷的背包。首先,我们添加第3卷的项目,剩下的第3卷。然后我们看第3列,我们将转到“2”行,因为我们已经使用了“3”项,我认为该单元格应为“2”。我们添加“2”项,留下1卷。在1列中,我们添加了较低的“1”项,pack full。我说得对吗?是的,你说得对,你能解释一下什么是“附加属性”吗?该表记录了给定成本的背包的最佳配置。看来你的想法不同了。