Created
April 1, 2016 17:10
-
-
Save sadedv/140261e50b339d067d0f0604d47e31b5 to your computer and use it in GitHub Desktop.
Knapsack greedy algorithm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.BufferedReader; | |
import java.io.InputStreamReader; | |
import java.io.*; | |
public class knapsack { | |
public static void main(String[] args){ | |
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); | |
int realtarget=0; | |
int [] items=new int[5]; | |
int[] result; | |
try{ | |
for(int i=0; i<5; i++) | |
{ | |
System.out.println("Enter Weight"+(i+1)+": "); | |
items[i]=Integer.parseInt(reader.readLine()); | |
} | |
for(int i=0; i<5; i++) | |
System.out.println("Value at "+(i+1)+" is :"+items[i] ); | |
System.out.print("Enter Target Value"); | |
realtarget=Integer.parseInt(reader.readLine()); | |
} | |
catch(IOException io) | |
{ | |
System.out.println(io); | |
} | |
System.out.println("Target Value is: "+realtarget); | |
result = knapSack(items, realtarget, 0, 0); | |
if(result == null) | |
System.out.println("Couldnt Find a solution"); | |
else | |
for(int j=0; j < result.length; j++) | |
System.out.println(result[j]); | |
} | |
// This function takes an array of items and a knapsack size. It attempts to | |
// fill the knapsack exactly with the given items. It only considers items | |
// in the array that are in slots first, first+1,... So when the function | |
// is initially called it should be called with first equal to 0. | |
// In addition the function also takes as input the size of the current | |
// (partial) solution. This is initially 0. | |
public static int[] knapSack(int[] items, int realtarget, int first, int solutionSize){ | |
if(realtarget > 0) | |
{ | |
// For each i, try placing the ith item in the knapsack | |
for(int i= first; i < items.length; i++) | |
{ | |
// Fit the smaller knapsack with items chosen from i+1, i+2,... | |
int [] answer = knapSack(items, realtarget-items[i], i+1, solutionSize+1); | |
if (answer != null) | |
{ | |
answer[solutionSize] = items[i]; | |
return answer; | |
} | |
} | |
return null; | |
} | |
// We have found a solution. So we create an array of the right size | |
// and send it back for filling | |
else if(realtarget==0) | |
{ | |
int[] temp = new int[solutionSize]; | |
return temp; | |
} | |
else // realtarget is negative, so no solution is possible | |
return null; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment