This is java program to implement 0/1 Knapsack problem. The knapsack problem or rucksack problem is a problem in combinatorial optimization: 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. It derives its name from the problem faced by someone who is constrained by a fixed-size knapsack and must fill it with the most valuable items.
Here is the source code of the Java Program to Solve the 0-1 Knapsack Problem. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
//This is a sample program to implement a 0/1 knapsack algorithm
import java.util.Scanner;
public class Zero_One_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];
m[i][j] = Math.max(m1, m2);
sol[i][j] = m2 > m1 ? 1 : 0;
}
}
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;
}
System.out.print("\nItems with weight ");
for (int i = 1; i < N + 1; i++)
if (selected[i] == 1)
System.out.print(val[i] +" ");
System.out.println("are selected by knapsack algorithm.");
}
public static void main (String[] args)
{
Scanner scan = new Scanner(System.in);
Zero_One_Knapsack ks = new Zero_One_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("Enter weight for "+ n +" elements");
for (int i = 1; i <= n; i++)
wt[i] = scan.nextInt();
System.out.println("Enter value for "+ n +" elements");
for (int i = 1; i <= n; i++)
val[i] = scan.nextInt();
System.out.println("Enter knapsack weight ");
int W = scan.nextInt();
ks.solve(wt, val, W, n);
scan.close();
}
}
Output:
$ javac Zero_One_Knapsack.java $ java Zero_One_Knapsack Enter number of elements 5 Enter weight for 5 elements 01 56 42 78 12 Enter value for 5 elements 50 30 20 10 50 Enter knapsack weight 150 Items with weight 50 30 20 50 are selected by knapsack algorithm.
Related posts:
Thao tác với tập tin và thư mục trong Java
Spring RestTemplate Error Handling
Jackson – Bidirectional Relationships
Java Program to Create a Random Linear Extension for a DAG
How to Get a Name of a Method Being Executed?
Câu lệnh điều khiển vòng lặp trong Java (break, continue)
Introduction to Spring Cloud Rest Client with Netflix Ribbon
Using a Custom Spring MVC’s Handler Interceptor to Manage Sessions
Java Program to Implement Fermat Primality Test Algorithm
Logging in Spring Boot
Spring Boot - Exception Handling
Examine the internal DNS cache
Guava – Join and Split Collections
LinkedHashSet trong Java hoạt động như thế nào?
Java Program to Implement Max Heap
Java Program to Implement HashSet API
Java Program to Implement Segment Tree
Java Program to Implement Randomized Binary Search Tree
Java Program to Check Whether an Undirected Graph Contains a Eulerian Cycle
Java Program to Implement Fermat Factorization Algorithm
Spring Boot - Tracing Micro Service Logs
How to Get All Spring-Managed Beans?
Hướng dẫn Java Design Pattern – Builder
Introduction to Spring Data JPA
Java Program to Implement Sorted Singly Linked List
Adding Parameters to HttpClient Requests
Java Program to Solve Knapsack Problem Using Dynamic Programming
How to Get the Last Element of a Stream in Java?
Java Program to Implement Interval Tree
Java Program to Implement Counting Sort
Java Program to Generate Random Partition out of a Given Set of Numbers or Characters
Java Program to Perform Postorder Non-Recursive Traversal of a Given Binary Tree