From cc7c6c7e96b0faf1859ca680c80e086569ac6ac2 Mon Sep 17 00:00:00 2001 From: Ritika Goyal <54592421+goyalritika14@users.noreply.github.com> Date: Mon, 4 Oct 2021 23:57:03 +0530 Subject: [PATCH] Create Fractional Knapsack.java --- Algo/Fractional Knapsack.java | 78 +++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Algo/Fractional Knapsack.java diff --git a/Algo/Fractional Knapsack.java b/Algo/Fractional Knapsack.java new file mode 100644 index 0000000..b744e61 --- /dev/null +++ b/Algo/Fractional Knapsack.java @@ -0,0 +1,78 @@ + +import java.util.Arrays; +import java.util.Comparator; + + +public class FractionalKnapSack { + private static double getMaxValue(int[] wt, int[] val,int capacity) + { + ItemValue[] iVal = new ItemValue[wt.length]; + + for (int i = 0; i < wt.length; i++) { + iVal[i] = new ItemValue(wt[i], val[i], i); + } + + + Arrays.sort(iVal, new Comparator() { + @Override + public int compare(ItemValue o1, ItemValue o2) + { + return o2.cost.compareTo(o1.cost); + } + }); + + double totalValue = 0d; + + for (ItemValue i : iVal) { + + int curWt = (int)i.wt; + int curVal = (int)i.val; + + if (capacity - curWt >= 0) { + + capacity = capacity - curWt; + totalValue += curVal; + } + else { + + double fraction + = ((double)capacity / (double)curWt); + totalValue += (curVal * fraction); + capacity + = (int)(capacity - (curWt * fraction)); + break; + } + } + + return totalValue; + } + + + static class ItemValue { + Double cost; + double wt, val, ind; + + + public ItemValue(int wt, int val, int ind) + { + this.wt = wt; + this.val = val; + this.ind = ind; + cost = new Double((double)val / (double)wt); + } + } + + + public static void main(String[] args) + { + int[] wt = { 10, 40, 20, 30 }; + int[] val = { 60, 40, 100, 120 }; + int capacity = 50; + + double maxValue = getMaxValue(wt, val, capacity); + + + System.out.println("Maximum value we can obtain = " + + maxValue); + } +}