为什么这个R代码没有正确填充背包?

时间:2016-05-12 10:33:00

标签: r knapsack-problem

考虑以下背包问题的R实现(在教育目的上产生低效的运行时行为)。

给出一系列重量为3,2和4磅且(按相同顺序)分别为7,4和10欧元的物品

#data:
itemsSize <- c(3, 2, 4)
itemsValue <- c(7, 4, 10)

以下R-function sack()的预期行为:我们想要一个最大值 欧元的总和没有违反麻袋的容量限制。解 对于麻袋(5)意味着给予5磅限制的麻袋的最佳值应该 是11。

max <- 0
sack <- function(cap) {
    for (i in (1:length(itemsSize))) {
        if ((space <- (cap - itemsSize[i])) >= 0) {
            if ((rised <- (sack(space) + itemsValue[i])) > max) {
                max <- rised
            }
        }
        return(max)

    }
}

现象:a)无论放在哪个项目,代码只会优化 关于该项目(通过更改itemsSize的顺序进行测试) 分别在#data中的项目顺序)。预期的行为将是 结合项目,因为我计数。 b)代码在麻袋中加倍 (通过例如#data中的itemsSize&lt; -c(2,4)和itemsValue&lt; -c(4,10)进行测试。预期的行为最多只能挑选每个项目一次。

总体而言:a)与b)一起:代码只包装第一个项目(可能还有几个实例),直到麻袋已满。

为什么会出现这些现象 - 我做错了什么?

0 个答案:

没有答案