chao
0
Q:

knapsack problem using greedy method in python

# Python3 program to solve fractional  
# Knapsack Problem 
class ItemValue: 
      
    """Item Value DataClass"""
    def __init__(self, wt, val, ind): 
        self.wt = wt 
        self.val = val 
        self.ind = ind 
        self.cost = val // wt 
  
    def __lt__(self, other): 
        return self.cost < other.cost 
  
# Greedy Approach 
class FractionalKnapSack: 
      
    """Time Complexity O(n log n)"""
    @staticmethod
    def getMaxValue(wt, val, capacity): 
          
        """function to get maximum value """
        iVal = [] 
        for i in range(len(wt)): 
            iVal.append(ItemValue(wt[i], val[i], i)) 
  
        # sorting items by value 
        iVal.sort(reverse = True) 
  
        totalValue = 0
        for i in iVal: 
            curWt = int(i.wt) 
            curVal = int(i.val) 
            if capacity - curWt >= 0: 
                capacity -= curWt 
                totalValue += curVal 
            else: 
                fraction = capacity / curWt 
                totalValue += curVal * fraction 
                capacity = int(capacity - (curWt * fraction)) 
                break
        return totalValue 
  
# Driver Code 
if __name__ == "__main__": 
    wt = [10, 40, 20, 30] 
    val = [60, 40, 100, 120] 
    capacity = 50
  
    maxValue = FractionalKnapSack.getMaxValue(wt, val, capacity) 
    print("Maximum value in Knapsack =", maxValue) 
  
# This code is contributed by vibhu4agarwal 
1
# a dynamic approach
# Returns the maximum value that can be stored by the bag
def knapSack(W, wt, val, n):
   K = [[0 for x in range(W + 1)] for x in range(n + 1)]
   #Table in bottom up manner
   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]
#Main
val = [50,100,150,200]
wt = [8,16,32,40]
W = 64
n = len(val)
print(knapSack(W, wt, val, n))
0

New to Communities?

Join the community