Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
C++ Program to Perform Optimal Paranthesization Using Dynamic Programming
This is a C++ program to perform Optimal Paranthesization using Dynamic Programming.
Algorithm
Begin Take the length n and dimension of matrix as input. MatrixChain() to find out minimum multiplications: Arguments: a[i][j]=Minimum number of scalar multiplications needed to compute the matrix A[i]A[i+1]...A[j] = A[i..j] where dimension of A[i] is p[i-1] x p[i]. a[i][j] means cost is zero when multiplying one matrix. L is chain length. m = cost / scalar multiplications. Body of the function: for i = 1 to n-1 Initialize a[i][i] = 0 for L = 2 to n-1 for i = 1 to n - L + 1 j = i + L - 1 a[i][j] = INT_MAX for k = i to j - 1 m = a[i][k] + a[k + 1][j] + p[i - 1] * p[k] * p[j]; if (m < a[i][j]) a[i][j] = m b[i][j] = k return a[1][n - 1] End
Example
#include<limits.h>
#include<iostream>
using namespace std;
int MatrixChain(int p[], int n) {
int a[n][n];
int b[n][n];
int i, j, k, L, m;
for (i = 1; i < n; i++)
a[i][i] = 0;
for (L = 2; L < n; L++) {
for (i = 1; i <= n - L + 1; i++) {
j = i + L - 1;
a[i][j] = INT_MAX;
for (k = i; k <= j - 1; k++) {
m = a[i][k] + a[k + 1][j] + p[i - 1] * p[k] * p[j];
if (m < a[i][j]) {
a[i][j] = m;
b[i][j] = k;
}
}
}
}
return a[1][n - 1];
}
int main() {
cout << "Enter the length:";
int n;
cin >> n;
int a[n];
cout << "Enter the dimensions: ";
for (int v = 0; v < n; ++v) {
cin >> a[v];
}
cout << "Minimum number of multiplications is: " <<
MatrixChain(a,n);
return 0;
}
Output
Enter the length:5 Enter the dimensions: 2 3 7 6 4 Minimum number of multiplications is: 174
Advertisements