Fractional Knapsack Problem Python
- Get link
- X
- Other Apps
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 Approachclass 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 Codeif __name__ == "__main__": wt = [10, 40, 20, 30] val = [60, 40, 100, 120] capacity = 50 # Function call maxValue = FractionalKnapSack.getMaxValue(wt, val, capacity) print("Maximum value in Knapsack =", maxValue)
OUTPUT:
Maximum value we can obtain = 240
- Get link
- X
- Other Apps
Comments
Post a Comment