In this article you will see how to solve knapsack problem by memoization .
Problem Statement
You have given a bag of capacity ‘W’ . And also you have ’n’ items with ‘w’ weights and ‘v’ values . You need to fill the bag with maximum values without crossing the capacity weight .
Recursive Approach
In this approach , we will try to find all the possibilities using recursion .
def knapSack(W, wt, val, n): if n == 0 or W == 0 :
return 0
if (wt[n-1] > W):
return knapSack(W, wt, val, n-1)
else:
return max(val[n-1] + knapSack(W-wt[n-1], wt, val, n-1),knapSack(W, wt, val, n-1))
The above approach takes O(n²) time , which is not fast .
Dynamic Programming Approach
Now lets try to solve this problem in polynomial time using memorization .
def knapSack(W, wt, val, n):
K = [[0 for x in range(W + 1)] for x in range(n + 1)] for i in range(n + 1):
for w in range(W + 1):
if i == 0 or w == 0:
K[i][w] = 0
elif wt[i-1] <= w:
K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w])
else:
K[i][w] = K[i-1][w] return K[n][W]
Where to Go From Here
My GitHub: https://github.com/myawesomehub
My Writing : Link
Keep following to get more useful articles 👍
Thanks You !