Skip to main content

Chain Matrix Multiplication in C Programming

#include< stdio.h>
#include< conio.h>
void MatrixChain(long*,long);
void pop(long[10][10],long,long);
long s[10][10],m[10][10];


void main()
{
 long *p,n,i,j,str,end;
 clrscr();
 printf("\n Enter number of element for p Matrix:");
 scanf("%ld",&n);
 printf("\n Enter dimension for P matrix:");

 for(i=0;i< =n;i++)
 {
  scanf("%ld",&p[i]);
 }
 MatrixChain(p,n+1);
 printf("\n-------------------------------------------");
 printf("\nEnter starting and Ending matrix:");
 scanf("%ld %ld",&str,&end);
 printf("\n-------------------------------------------");
 printf("\n Parenthesization order for Matrix Chained Multiplication(MCM) is:");
 printf("\n-------------------------------------------\n");
 pop(s,str,end);
 printf("\n-------------------------------------------");

getch();
}

void MatrixChain(long p[10],long len)
{
 long n,i,j,l,q,k;
 n=len-1;

 for(i=0;i< =n;i++)
  for(j=0;j< n;j++)
   m[i][j]=-1;
 for(i=0;i< =n;i++)
  for(j=0;j< =n;j++)
   s[i][j]=-1;

 for(i=1;i< =n;i++)
  m[i][i]=0;



 for(l=2;l< =n;l++)
 {
  for(i=1;i< =n-l+1;i++)
  {
   j=i+l-1;
   m[i][j]=32767;

   for(k=i;k< =j-1;k++)
   {
    q=m[i][k]+m[k+1][j]+(p[i-1]*p[k]*p[j]);
    if(q< m[i][j])
    {
     m[i][j]=q;
     s[i][j]=k;
    }
   }
  }
 }





 printf("\n--------------------M matrix--------------------");


 for(i=1;i< =n;i++)
 {
  printf("\n");
  for(j=1;j< =n;j++)
   printf("%7d",m[i][j]);

 }
  printf("\n--------------------S matrix--------------------");

 for(i=1;i< =n;i++)
 {
  printf("\n");
  for(j=1;j< =n;j++)
   printf("%7d",s[i][j]);

 }
}

void pop(long s[10][10],long i,long j)
{

 if(i==j)
  printf("A%d",i);
 else
 {
  printf("(");
  pop(s,i,s[i][j]);
  pop(s,s[i][j]+1,j);
  printf(")");
 }

}

OUTPUT
Enter number of element for p Matrix:6

 Enter dimension for P matrix:30 3 15 5 10 20 8

--------------------M matrix--------------------
      0   1350    675   1275   2775   2175
     -1      0    225    375    975   1455
     -1     -1      0    750   2500   2400
     -1     -1     -1      0   1000   1800
     -1     -1     -1     -1      0   1600
     -1     -1     -1     -1     -1      0
--------------------S matrix--------------------
     -1      1      1      1      1      1
     -1     -1      2      3      4      5
     -1     -1     -1      3      3      3
     -1     -1     -1     -1      4      5
     -1     -1     -1     -1     -1      5
     -1     -1     -1     -1     -1     -1
-------------------------------------------
Enter starting and Ending matrix:1 6

-------------------------------------------
 Parenthesization order for Matrix Chained Multiplication(MCM) is:
-------------------------------------------
(A1((((A2A3)A4)A5)A6))
-------------------------------------------

Comments

Popular posts from this blog

MVT (Multiprogramming Variable Task) in C Programming

#include< stdio.h> #include< conio.h> void main() { int i,os_m,nPage,total,pg[25]; clrscr(); printf("\nEnter total memory size:"); scanf("%d",&total); printf("\nEnter memory for OS:"); scanf("%d",&os_m); printf("\nEnter no. of pages:"); scanf("%d",&nPage); for(i=0;i< nPage;i++) { printf("Enter size of page[%d]:",i+1); scanf("%d",&pg[i]); } total=total-os_m; for(i=0;i< nPage;i++) { if(total>=pg[i]) { printf("\n Allocate page %d",i+1); total=total-pg[i]; } else printf("\n page %d is not allocated due to insufficient memory.",i+1); } printf("\n External Fragmentation is:%d",total); getch(); } OUTPUT Enter total memory size:1024 Enter memory for OS:256 Enter no. of pages:4 Enter size of page[1]:128 Enter size of page[2]:512 Enter size of page[3]:64 Enter size of page[4]:512 Allocate page 1 Al

Deadlock Prevention using Banker’s Algorithm in C Programming

#include< stdio.h> #include< conio.h> void main() { int allocated[15][15],max[15][15],need[15][15],avail[15],tres[15],work[15],flag[15]; int pno,rno,i,j,prc,count,t,total; count=0; clrscr(); printf("\n Enter number of process:"); scanf("%d",&pno); printf("\n Enter number of resources:"); scanf("%d",&rno); for(i=1;i< =pno;i++) { flag[i]=0; } printf("\n Enter total numbers of each resources:"); for(i=1;i<= rno;i++) scanf("%d",&tres[i]); printf("\n Enter Max resources for each process:"); for(i=1;i<= pno;i++) { printf("\n for process %d:",i); for(j=1;j<= rno;j++) scanf("%d",&max[i][j]); } printf("\n Enter allocated resources for each process:"); for(i=1;i<= pno;i++) { printf("\n for process %d:",i); for(j=1;j<= rno;j++) scanf("%d",&allocated[i][j]); } printf("\n avai

implement Rail fence cipher in Java

// File Name: RailFence.java import java.util.*; class RailFenceBasic{ int depth; String Encryption(String plainText,int depth)throws Exception { int r=depth,len=plainText.length(); int c=len/depth; char mat[][]=new char[r][c]; int k=0; String cipherText=""; for(int i=0;i< c;i++) { for(int j=0;j< r;j++) { if(k!=len) mat[j][i]=plainText.charAt(k++); else mat[j][i]='X'; } } for(int i=0;i< r;i++) { for(int j=0;j< c;j++) { cipherText+=mat[i][j]; } } return cipherText; } String Decryption(String cipherText,int depth)throws Exception { int r=depth,len=cipherText.length(); int c=len/depth; char mat[][]=new char[r][c]; int k=0; String plainText=""; for(int i=0;i< r;i++) { for(int j=0;j< c;j++) { mat[i][j]=cipherText.charAt(k++); } } for(int i=0;i< c;i++) { for(int j=0;j< r;j++) { plainText+=mat[j][i]; } }