Это моя реализация javascript для решения проблемы с рюкзаком. В этой задаче вам предоставляется список предметов с весами и значениями, а также рюкзак с грузоподъемностью. Цель состоит в том, чтобы определить, как максимизировать стоимость предметов, которые вы можете держать в рюкзаке, не превышая грузоподъемность. Моя функция, приведенная ниже, принимает два параметра: элементы (массив объектов-элементов, каждый из которых содержит поле веса и значения, и целое число емкости, представляющее емкость веса рюкзака. Я использую таблицу заметок, в которой каждый индекс: вес сохраняется для повторного доступа к Избегайте повторных вычислений getMax (). Хороша ли моя реализация? Можно ли ее улучшить?
function knapsackMaxValue(items, capacity) {
const memo = {}
function getMax(i, weight) {
if (i == items.length) {
return 0;
}
if (memo[i + ':' + weight] != undefined) {
console.log('memo found')
return memo[i + ':' + weight]
}
if (items[i].weight + weight > capacity) {
memo[i + ':' + weight] = getMax(i + 1, weight)
return memo[i + ':' + weight]
} else {
let maxValue = Math.max(getMax(i + 1, weight), items[i].value + getMax(i + 1, weight + items[i].weight))
memo[i + ':' + weight] = maxValue
return maxValue
}
}
return getMax(0, 0)
}