Skip to content

Instantly share code, notes, and snippets.

@sadedv
Created April 1, 2016 17:10
Show Gist options
  • Save sadedv/140261e50b339d067d0f0604d47e31b5 to your computer and use it in GitHub Desktop.
Save sadedv/140261e50b339d067d0f0604d47e31b5 to your computer and use it in GitHub Desktop.
Knapsack greedy algorithm
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