-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathKnapsack.js
More file actions
66 lines (62 loc) · 1.43 KB
/
Knapsack.js
File metadata and controls
66 lines (62 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
function max(a,b){
return (a > b)? a : b;
}
/**
*
* Recursive solution to Knapsack problem
* @param capacity
* @param size
* @param value
* @param n
* @returns {number}
*/
function RecurKnapsack(capacity, size, value, n){
if(capacity == 0 || n == 0){
return 0;
}
else{
if(size[n -1] > capacity){
return RecurKnapsack(capacity,size,value,n-1);
}
else{
return max(value[n-1] +
RecurKnapsack(capacity - size[n-1],size,value,n-1),
RecurKnapsack(capacity,size,value,n-1));
}
}
}
/**
* Dynamic Programming solution to Knapsack problem
* @param capacity
* @param size
* @param value
* @param n
* @returns {*}
* @constructor
*/
function DynKnapsack(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];
}
}
}
return k[n][capacity]
}
var capacity = 16;
var value = [4,5,10,11,13];
var size = [3,4,7,8,9];
var n = 5;
console.log(RecurKnapsack(capacity,size,value,n)); //23
console.log(DynKnapsack(capacity,size,value,n)); //23