Skip to content

Instantly share code, notes, and snippets.

@Williammer
Last active September 14, 2018 08:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Williammer/fc077df48a161e3bf328970510930efc to your computer and use it in GitHub Desktop.
Save Williammer/fc077df48a161e3bf328970510930efc to your computer and use it in GitHub Desktop.
backpack solution recur/dynamic/greedy with javaScript.
function max(a, b) {
return (a > b) ? a : b;
}
function knapsackRecur(capacity, size, value, n) {
if (n == 0 || capacity == 0) {
return 0;
}
if (size[n - 1] > capacity) {
return knapsack(capacity, size, value, n - 1);
} else {
return max(value[n - 1] +
knapsack(capacity - size[n - 1], size, value, n - 1), knapsack(capacity, size, value, n - 1));
}
}
function dKnapsack(capacity, size, value, n) {
var K = [];
for (var i = 0; i <= capacity + 1; i++) {
K[i] = [];
}
for (var i = 0; i <= n; i++) {
for (var w = 0; w <= capacity; w++) {
if (i == 0 || w == 0) {
K[i][w] = 0;
} else if (size[i - 1] <= w) {
K[i][w] = max(value[i - 1] + K[i - 1][w - size[i - 1]],
K[i - 1][w]);
} else {
K[i][w] = K[i - 1][w];
}
putstr(K[i][w] + " ");
}
print();
}
return K[n][capacity];
}
function ksackGreedy(values, weights, capacity) {
var load = 0;
vari = 0;
varw = 0;
while (load < capacity && i < 4) {
if (weights[i] <= (capacity - load)) {
w += values[i];
load += weights[i];
} else {
var r = (capacity - load) / weights[i];
w += r * values[i];
load += weights[i];
}++i;
}
return w;
}
var value = [4, 5, 10, 11, 13];
var size = [3, 4, 7, 8, 9];
var capacity = 16;
var n = 5;
print(dKnapsack(capacity, size, value, n));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment