반응형
//Fn.c
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"Fn.h"
void printMatrix(int **Matrix, int m, int n){
int m1, n1;
for(m1=0;m1<m;m1++){
for(n1=0;n1<n;n1++){
if(n1 == n-1){
printf("%d\n", Matrix[m1][n1]);
}
else
printf("%d ", Matrix[m1][n1]);
}
}
}
//(m x n) matrix
void insertRand(int **Matrix, int m, int n){
srand(time(NULL));
int m1, n1;
for(m1=0;m1<m;m1++){
for(n1=0;n1<n;n1++){
Matrix[m1][n1] = rand()%10000;
}
}
}
int** createMatrix(int m, int n){
int **matrix;
matrix = (int**)malloc(sizeof(int*)*m);
for(int m1=0;m1<m;m1++){
matrix[m1] = (int*)malloc(sizeof(int)*n);
}
return matrix;
}
void freeMatrix(int **matrix, int m, int n){
int m1, n1;
//arr[0][] ~~~~~~~~ a[m1][]
for(m1=0;m1<m;m1++){
free(matrix[m1]);
}
free(matrix);
}
//Fn.h
#include<stdio.h>
int** MultiplyMatrix(int **matrix1, int **matrix2, int m, int n, int q);
void printMatrix(int **Matrix, int m, int n);
void insertRand(int **Matrix, int m, int n);
int** createMatrix(int m, int n);
void freeMatrix(int **matrix, int m, int n);
void freeArr(int *arr);
//MatrixMultiplyTest.c
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"Fn.h"
void main(){
//(m x n), (n x q)
int m, n, q;
int **Matrix1, **Matrix2, **result;
clock_t start, end;
float t;
//seed
srand(time(NULL));
int i, j;
//(100x100) ~ (599x599)
for(j=100;j<600;j+=100){
m = rand()%10 + j;
n = rand()%10 + j;
q = rand()%10 + j;
printf("Matrix1(%dx%d) * Matrix2(%dx%d) \n",m,n,n,q);
//5times
for(i=0;i<5;i++){
//random m, n, q
//create Matrix
Matrix1 = createMatrix(m,n);
Matrix2 = createMatrix(n,q);
insertRand(Matrix1, m, n);
insertRand(Matrix2, n, q);
/*
//show Matrix
printf("=Matrix1=\n");
printMatrix(Matrix1, m, n);
printf("=Matrix2=\n");
printMatrix(Matrix2, n, q);
*/
//start multiply
start = clock();
result = MultiplyMatrix(Matrix1, Matrix2, m, n, q);
end = clock();
t = (end - start)/CLOCKS_PER_SEC;
/*
//show MultiplyMatrix
printf("=result=\n");
printMatrix(result, m, q);
*/
//Time
printf("Time : %.3f sec", t);
freeMatrix(Matrix1, m, n);
freeMatrix(Matrix2, n, q);
freeMatrix(result, m, q);
}
}
}
//MultiplyMatrix.c
#include<stdio.h>
#include"Fn.h"
//(m x n) (n x q) => (m x q)
int** MultiplyMatrix(int **matrix1, int **matrix2, int m, int n, int q){
int **result;
int m1, n1, q1;
int res;
for(m1=0; m1<m; m1++){
for(q1=0;q1<q;q1++){
res = 0;
for(n1=0;n1<n;n1++){
res = res + matrix1[m1][n1]*matrix2[n1][q1];
}
result[m1][q1] = res;
}
}
return result;
}
728x90
반응형
'공부 > 자료구조' 카테고리의 다른 글
연산자 우선순위를 반영하는 산술식의 이진트리 설계와 구현 (0) | 2021.05.09 |
---|---|
탐색트리, 정렬 알고리즘과 계산시간 비교 (0) | 2021.05.09 |
다항식 연산 (0) | 2021.05.09 |
Huffman 트리 (0) | 2021.05.09 |
정렬하기 (0) | 2020.07.17 |