Matrix Chain Multiplication
SOURCE CODE:
#include<stdio.h>
int n,i,j,m[20][20],s[20][20],p[20];
void print(int i,int j){
if(i==j)
printf("A%d",i);
else{
printf("(");
print(i,s[i][j]);
print(s[i][j]+1,j);
printf(")");
}
}
void mul(){
int q,k;
for(i=n;i>0;i--)
for(j=i;j<=n;j++){
if(i==j)
m[i][j]=0;
else{
for(k=1;k<j;k++){
q=m[i][k]+m[k+1][j]+p[i-1]*p[j]*p[k];
if(q < m[i][j]){
m[i][j]=q;
s[i][j]=k;
}
}
}
}
}
int chain(int p[],int i,int j){
if(i==j)
return 0;
int k,count,min=9999;//assuming 9999 is the max value
for(k=i;k<j;k++){
count = chain(p,i,k)+chain(p,k+1,j)+p[i-1]*p[j]*p[k];
if(count < min){
min = count;
}
}
return min;
}
int main(){
int k;
printf("Enter # of elements :\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++){
m[i][i]=0;
m[i][j]=9999;//assuming that 9999 is the maximum possible value
s[i][j]=0;
}
printf("Enter dimenssions:\n");
for(k=0;k<=n;k++){
printf("\nP%d = ",k);
scanf("%d",&p[k]);
}
mul();
printf("\nCost matrix :\n");
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
printf("%d\t",m[i][j]);
printf("\n");
}
printf("Matrix sequence is :");
print(1,n);
printf("\nMinimum # of multiplications is %d.\n",chain(p,1,n));
return 0;
}
OUTPUT:
Enter # of elements :
5
Enter dimenssions:
P0 = 4
P1 = 10
P2 = 3
P3 = 12
P4 = 20
P5 = 7
Cost matrix :
0 120 264 1080 1344
0 0 360 1320 1350
0 0 0 720 1140
0 0 0 0 1680
0 0 0 0 0
Matrix sequence is :((A1A2)((A3A4)A5))
Minimum # of multiplications is 1344.
#include<stdio.h>
int n,i,j,m[20][20],s[20][20],p[20];
void print(int i,int j){
if(i==j)
printf("A%d",i);
else{
printf("(");
print(i,s[i][j]);
print(s[i][j]+1,j);
printf(")");
}
}
void mul(){
int q,k;
for(i=n;i>0;i--)
for(j=i;j<=n;j++){
if(i==j)
m[i][j]=0;
else{
for(k=1;k<j;k++){
q=m[i][k]+m[k+1][j]+p[i-1]*p[j]*p[k];
if(q < m[i][j]){
m[i][j]=q;
s[i][j]=k;
}
}
}
}
}
int chain(int p[],int i,int j){
if(i==j)
return 0;
int k,count,min=9999;//assuming 9999 is the max value
for(k=i;k<j;k++){
count = chain(p,i,k)+chain(p,k+1,j)+p[i-1]*p[j]*p[k];
if(count < min){
min = count;
}
}
return min;
}
int main(){
int k;
printf("Enter # of elements :\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++){
m[i][i]=0;
m[i][j]=9999;//assuming that 9999 is the maximum possible value
s[i][j]=0;
}
printf("Enter dimenssions:\n");
for(k=0;k<=n;k++){
printf("\nP%d = ",k);
scanf("%d",&p[k]);
}
mul();
printf("\nCost matrix :\n");
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
printf("%d\t",m[i][j]);
printf("\n");
}
printf("Matrix sequence is :");
print(1,n);
printf("\nMinimum # of multiplications is %d.\n",chain(p,1,n));
return 0;
}
OUTPUT:
Enter # of elements :
5
Enter dimenssions:
P0 = 4
P1 = 10
P2 = 3
P3 = 12
P4 = 20
P5 = 7
Cost matrix :
0 120 264 1080 1344
0 0 360 1320 1350
0 0 0 720 1140
0 0 0 0 1680
0 0 0 0 0
Matrix sequence is :((A1A2)((A3A4)A5))
Minimum # of multiplications is 1344.
Comments
Post a Comment