الگوریتم ماتریس استراسن
برای دیدن برنامه روی ادامه ی مطلب کلیک کنید
Msmas.blogfa.com
#include<stdio.h>
#include<conio.h>
#include<string.h>
void Sterasen(int A[8][8],int B[8][8],int n, int C[8][8]);
int cs=0,cm=0;
void main(){
clrscr();
int i,j,n,A[8][8],B[8][8],C[8][8];
printf("Enter dimesion of Matrixs:");
scanf("%d",&n);
printf("Enter A Matrix:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("A[%d][%d]:",i,j);
scanf("%d",&A[i][j]);
}
printf("\n");
}
printf("Enter B Matrix:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("B[%d][%d]:",i,j);
scanf("%d",&B[i][j]);
}
printf("\n");
}
Sterasen(A,B,n,C);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("A*B[%d][%d]:",i,j);
printf("%d\n",C[i][j]);
}
printf("\n");
}
printf("Count of Addition:%d\n",cs);
printf("Count of Multiplication:%d\n",cm);
getch();
}
void Sterasen(int A[8][8],int B[8][8],int n,int C[8][8]){
int i,j,k;
int A1[8][8],A2[8][8],A3[8][8],A4[8][8],B1[8][8],B2[8][8],B3[8][8],B4[8][8];
int M1[8][8],M2[8][8],M3[8][8],M4[8][8],M5[8][8],M6[8][8],M7[8][8];
int R1[8][8],R2[8][8],R3[8][8],R4[8][8],T1[8][8],T2[8][8];
if (n<=2){
for(i=0;i<n;i++)
for(j=0;j<n;j++){
cs++;
for(k=0;k<n;k++){
cm++;
C[i][j]+=A[i][k]*B[k][j];
}
}
}
else{
n=n/2;
for(i=0;i<n;i++)
for(j=0;j<n;j++){
A1[i][j]=A[i][j];
B1[i][j]=B[i][j];
}
for(i=0;i<n;i++)
for(j=0;j<n;j++){
A2[i][j]=A[i][j+n];
B2[i][j]=B[i][j+n];
}
for(i=0;i<n;i++)
for(j=0;j<n;j++){
A3[i][j]=A[i+n][j];
B3[i][j]=B[i+n][j];
}
for(i=0;i<n;i++)
for(j=0;j<n;j++){
A4[i][j]=A[i+n][j+n];
B3[i][j]=B[i+n][j+n];
}
for(i=0;i<n;i++)
for(j=0;j<n;j++){
T1[i][j]=A1[i][j]+A4[i][j];
T2[i][j]=B1[i][j]+B4[i][j];
}
cs=cs+2;
cm++;
Sterasen(T1,T2,n,M1);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
T1[i][j]=A3[i][j]+A4[i][j];
cs++;
cm++;
Sterasen(T1,B1,n,M2);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
T1[i][j]=B2[i][j]-B4[i][j];
cs++;
cm++;
Sterasen(A1,T1,n,M3);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
T1[i][j]=B3[i][j]-B1[i][j];
cs++;
cm++;
Sterasen(A4,T1,n,M4);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
T1[i][j]=A1[i][j]+A2[i][j];
cs++;
cm++;
Sterasen(T1,B4,n,M5);
for(i=0;i<n;i++)
for(j=0;j<n;j++){
T1[i][j]=A3[i][j]-A1[i][j];
T2[i][j]=B1[i][j]+B4[i][j];
}
cs=cs+2;
cm++;
Sterasen(T1,T2,n,M6);
for(i=0;i<n;i++)
for(j=0;j<n;j++){
T1[i][j]=A2[i][j]-A4[i][j];
T2[i][j]=B3[i][j]+B4[i][j];
}
cs=cs+2;
cm++;
Sterasen(T1,T2,n,M7);
for(i=0;i<n;i++)
for(j=0;j<n;j++){
R1[i][j]=M1[i][j]+M4[i][j]-M5[i][j]+M7[i][j];
R2[i][j]=M3[i][j]+M5[i][j];
R3[i][j]=M2[i][j]+M4[i][j];
R4[i][j]=M1[i][j]+M3[i][j]-M2[i][j]+M6[i][j];
}
cs=cs+8;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
C[i][j]=R1[i][j];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
C[i][j+n]=R2[i][j];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
C[i+n][j]=R3[i][j];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
C[i+n][j+n]=R4[i][j];
}
}
خیلی آقایی دایی...
کرتیم به مولا
خیلی عالیه ممنون از بزرگیتون
استفاده شد فراوون
ممنون از لطفتون سامان جان قابل شما رو نداشت.
دایی مرسی دمت گرم خدا خیرت بده