This is a Java Program to Implement Knapsack Algorithm. This algorithm is used to solve knapsack problem : Given a set of items, each with a mass and a value, determine the number of each item to include in a collection so that the total weight is less than or equal to a given limit and the total value is as large as possible.
Here is the source code of the Java Program to Implement Knapsack Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
** Java Program to Implement Knapsack Algorithm
**/
import java.util.Scanner;
/** Class Knapsack **/
public class Knapsack
{
public void solve(int[] wt, int[] val, int W, int N)
{
int NEGATIVE_INFINITY = Integer.MIN_VALUE;
int[][] m = new int[N + 1][W + 1];
int[][] sol = new int[N + 1][W + 1];
for (int i = 1; i <= N; i++)
{
for (int j = 0; j <= W; j++)
{
int m1 = m[i - 1][j];
int m2 = NEGATIVE_INFINITY;
if (j >= wt[i])
m2 = m[i - 1][j - wt[i]] + val[i];
/** select max of m1, m2 **/
m[i][j] = Math.max(m1, m2);
sol[i][j] = m2 > m1 ? 1 : 0;
}
}
/** make list of what all items to finally select **/
int[] selected = new int[N + 1];
for (int n = N, w = W; n > 0; n--)
{
if (sol[n][w] != 0)
{
selected[n] = 1;
w = w - wt[n];
}
else
selected[n] = 0;
}
/** Print finally selected items **/
System.out.println("\nItems selected : ");
for (int i = 1; i < N + 1; i++)
if (selected[i] == 1)
System.out.print(i +" ");
System.out.println();
}
/** Main function **/
public static void main (String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Knapsack Algorithm Test\n");
/** Make an object of Knapsack class **/
Knapsack ks = new Knapsack();
System.out.println("Enter number of elements ");
int n = scan.nextInt();
int[] wt = new int[n + 1];
int[] val = new int[n + 1];
System.out.println("\nEnter weight for "+ n +" elements");
for (int i = 1; i <= n; i++)
wt[i] = scan.nextInt();
System.out.println("\nEnter value for "+ n +" elements");
for (int i = 1; i <= n; i++)
val[i] = scan.nextInt();
System.out.println("\nEnter knapsack weight ");
int W = scan.nextInt();
ks.solve(wt, val, W, n);
}
}
Output:
Knapsack Algorithm Test Enter number of elements 5 Enter weight for 5 elements 50 10 20 40 30 Enter value for 5 elements 300 60 90 100 240 Enter knapsack weight 60 Items selected : 2 3 5
Related posts:
Spring @RequestMapping New Shortcut Annotations
Các kiểu dữ liệu trong java
Java – Try with Resources
Class Loaders in Java
Removing all Nulls from a List in Java
Java Program to Describe the Representation of Graph using Incidence Matrix
A Guide to JUnit 5 Extensions
Java – InputStream to Reader
Guide to Character Encoding
Java Web Services – Jersey JAX-RS – REST và sử dụng REST API testing tools với Postman
Validations for Enum Types
Vòng lặp for, while, do-while trong Java
OAuth2 for a Spring REST API – Handle the Refresh Token in Angular
Comparing Strings in Java
Java Program to Implement Hopcroft Algorithm
Object Type Casting in Java
Java Program to Check Multiplicability of Two Matrices
Ignore Null Fields with Jackson
Java Collections Interview Questions
Java Program to Implement TreeMap API
Hướng dẫn Java Design Pattern – Visitor
Practical Java Examples of the Big O Notation
HashSet trong Java hoạt động như thế nào?
Date Time trong Java 8
Intro to Inversion of Control and Dependency Injection with Spring
Java Program to Perform Matrix Multiplication
Guide to java.util.concurrent.Future
Java Program to Perform Insertion in a 2 Dimension K-D Tree
Java Program to Implement Gauss Jordan Elimination
How to Replace Many if Statements in Java
Command-Line Arguments in Java
Java Program to Find the Connected Components of an UnDirected Graph