Enhance readability of ZeroOneKnapsack.js (#1574)

* Enhance readability of ZeroOneKnapsack.js

* Update ZeroOneKnapsack.js

---------

Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
This commit is contained in:
Hardik Pawar
2023-10-30 11:04:06 +05:30
committed by GitHub
parent d74f242ac4
commit e5af4c24b4

View File

@ -1,26 +1,34 @@
/**
* A Dynamic Programming based solution for calculating Zero One Knapsack
* https://en.wikipedia.org/wiki/Knapsack_problem
*
* Time and Space Complexity: O(n*cap)
*/
const zeroOneKnapsack = (arr, n, cap, cache) => {
// Base Case: No capacity or no items
if (cap === 0 || n === 0) {
cache[n][cap] = 0
return cache[n][cap]
}
// Lookup (value already calculated)
if (cache[n][cap] !== -1) {
return cache[n][cap]
}
// Profit when excluding the nth item
let notPick = zeroOneKnapsack(arr, n - 1, cap, cache)
// Profit when including the nth item
let pick = 0
if (arr[n - 1][0] <= cap) {
cache[n][cap] = Math.max(
arr[n - 1][1] + zeroOneKnapsack(arr, n - 1, cap - arr[n - 1][0], cache),
zeroOneKnapsack(arr, n - 1, cap, cache)
)
return cache[n][cap]
} else {
cache[n][cap] = zeroOneKnapsack(arr, n - 1, cap, cache)
return cache[n][cap]
// If weight of the nth item is within the capacity
pick =
arr[n - 1][1] + zeroOneKnapsack(arr, n - 1, cap - arr[n - 1][0], cache)
}
cache[n][cap] = Math.max(pick, notPick) // maximize profit
return cache[n][cap]
}
const example = () => {