Added code for memory function implementation

Added a function which implements knapsack using memory functions. Also I updated the test cases to include test cases for the memory function implementation.
This commit is contained in:
bharath-123 2018-07-23 00:36:53 +05:30 committed by GitHub
parent 9faaebcc80
commit a9f9062080
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,6 +1,21 @@
"""
Given weights and values of n items, put these items in a knapsack of capacity W to get the maximum total value in the knapsack.
"""
def MF_knapsack(i,wt,val,j):
'''
This code involves the concept of memory functions. Here we solve the subproblems which are needed
unlike the below example
F is a 2D array with -1s filled up
'''
global F # a global dp table for knapsack
if F[i][j] < 0:
if j < wt[i - 1]:
val = MF_knapsack(i - 1,wt,val,j)
else:
val = max(MF_knapsack(i - 1,wt,val,j),MF_knapsack(i - 1,wt,val,j - wt[i - 1]) + val[i - 1])
F[i][j] = val
return F[i][j]
def knapsack(W, wt, val, n):
dp = [[0 for i in range(W+1)]for j in range(n+1)]
@ -12,3 +27,16 @@ def knapsack(W, wt, val, n):
dp[i][w] = dp[i-1][w]
return dp[n][w]
if name == '__main__':
'''
Adding test case for knapsack
'''
val = [3,2,4,4]
wt = [4,3,2,3]
n = 4
w = 6
F = [[0]*(w + 1)] + [[0] + [-1 for i in range(w + 1)] for j in range(n + 1)]
print(knapsack(w,wt,val,n))
print(MF_knapsack(n,wt,val,w)) # switched the n and w