Правильно ли моя реализация javascript решения DP для рюкзака использует таблицу напоминаний? - PullRequest
0 голосов
/ 14 января 2019

Это моя реализация 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)
}
...