This is a java program to perform optimal paranthesization by making use of dymanic programming. This program determines the order in which the chain of matrices should be multiplied.
Here is the source code of the Java Program to Perform Optimal Paranthesization Using Dynamic Programming. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
package com.sanfoundry.numerical;
import java.util.Scanner;
public class OptimalParanthesizationUsingDP
{
private int[][] m;
private int[][] s;
private int n;
public OptimalParanthesizationUsingDP(int[] p)
{
n = p.length - 1; // how many matrices are in the chain
m = new int[n + 1][n + 1]; // overallocate m, so that we don't use index
// 0
s = new int[n + 1][n + 1]; // same for s
matrixChainOrder(p); // run the dynamic-programming algorithm
}
private void matrixChainOrder(int[] p)
{
// Initial the cost for the empty subproblems.
for (int i = 1; i <= n; i++)
m[i][i] = 0;
// Solve for chains of increasing length l.
for (int l = 2; l <= n; l++)
{
for (int i = 1; i <= n - l + 1; i++)
{
int j = i + l - 1;
m[i][j] = Integer.MAX_VALUE;
// Check each possible split to see if it's better
// than all seen so far.
for (int k = i; k < j; k++)
{
int q = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];
if (q < m[i][j])
{
// q is the best split for this subproblem so far.
m[i][j] = q;
s[i][j] = k;
}
}
}
}
}
private String printOptimalParens(int i, int j)
{
if (i == j)
return "A[" + i + "]";
else
return "(" + printOptimalParens(i, s[i][j])
+ printOptimalParens(s[i][j] + 1, j) + ")";
}
public String toString()
{
return printOptimalParens(1, n);
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out
.println("Enter the array p[], which represents the chain of matrices such that the ith matrix Ai is of dimension p[i-1] x p[i]");
System.out.println("Enter the total length: ");
int n = sc.nextInt();
int arr[] = new int[n];
System.out.println("Enter the dimensions: ");
for (int i = 0; i < n; i++)
arr[i] = sc.nextInt();
OptimalParanthesizationUsingDP opudp = new OptimalParanthesizationUsingDP(
arr);
System.out.println("Matrices are of order: ");
for (int i = 1; i < arr.length; i++)
{
System.out.println("A" + i + "-->" + arr[i - 1] + "x" + arr[i]);
}
System.out.println(opudp.toString());
sc.close();
}
}
Output:
$ javac OptimalParanthesizationUsingDP.java $ java OptimalParanthesizationUsingDP Enter the array p[], which represents the chain of matrices such that the ith matrix Ai is of dimension p[i-1] x p[i] Enter the total length: 5 Enter the dimensions: 2 4 5 2 1 Matrices are of order: A1-->2x4 A2-->4x5 A3-->5x2 A4-->2x1 (A[1](A[2](A[3]A[4])))
Related posts:
Java Program to Perform Sorting Using B-Tree
Guide to the Java Clock Class
Java Program to do a Breadth First Search/Traversal on a graph non-recursively
Java Program to Construct an Expression Tree for an Postfix Expression
The HttpMediaTypeNotAcceptableException in Spring MVC
Encode a String to UTF-8 in Java
Java Program to Solve the Fractional Knapsack Problem
Spring JDBC
Write/Read cookies using HTTP and Read a file from the internet
Java Program to Represent Linear Equations in Matrix Form
Một số tính năng mới về xử lý ngoại lệ trong Java 7
Introduction to Project Reactor Bus
Java Program to Compute Determinant of a Matrix
Spring Boot - Service Components
Java Program to Perform Inorder Non-Recursive Traversal of a Given Binary Tree
Set Interface trong Java
Hướng dẫn Java Design Pattern – Observer
Java – Reader to Byte Array
Java Program to Describe the Representation of Graph using Adjacency List
Show Hibernate/JPA SQL Statements from Spring Boot
Java Program to Find Basis and Dimension of a Matrix
Check if a String is a Palindrome in Java
Spring Boot - Unit Test Cases
Java 9 Stream API Improvements
The Order of Tests in JUnit
Java Program to Check if a Given Graph Contain Hamiltonian Cycle or Not
Một số ký tự đặc biệt trong Java
Spring MVC Setup with Kotlin
Spring Boot - Internationalization
Lớp LinkedHashMap trong Java
Comparing Arrays in Java
Java Program to Implement Quick Sort Using Randomization