Неплохо бы выложить какой-нибудь исходник как отправную точку, чтобы иметь и ввод-вывод и измерение времени.
Пожалуйста, умножение "в лоб" (самый медленный алгоритм):
Код:
#include <stdio.h>
#define SIZE 50
int *alloc_matrix(size){
int *matrix = malloc(size * size * sizeof(int));
printf("matrix %dx%d allocated\n", size, size);
return matrix;
}
void del_matrix(int *matrix){
free(matrix);
}
void multiply_matrix(int *m1, int *m2, int * ans, int size){
int i, j, k, l, tmp = 0;
for(i = 0; i < size; i++)
for(j = 0; j < size; j++){
for(k = 0; k < size; k++) tmp += m1[i * size + k] * m2[j + k * size];
ans[i * size + j] = tmp;
tmp = 0;
}
}
main(int argc, char** argv){
int i, j, size;
if(argc > 1) size = atoi(argv[1]);
else size = SIZE;
printf("allocating\n");
int *m1 = alloc_matrix(size);
int *m2 = alloc_matrix(size);
int *ans = alloc_matrix(size);
for(i=0; i<size; i++)
for(j=0; j<size; j++){
m1[i + j * size] = i* size +j;
m2[i + j * size] = i* 1000 +j;
}
printf("multiplying\n");
multiply_matrix(m1, m2, ans, size);
FILE *f = fopen("matrix_mult", "w");
printf("writing\n");
for(i=0; i<size; i++){
for(j=0; j<size; j++)
fprintf(f, "%d\t", ans[i*size + j]);
fprintf(f, "\n");
}
fclose(f);
del_matrix(m1);
del_matrix(m2);
del_matrix(ans);
}
С выводом в файл получается следующее время выполнения:
200x200 - 0.08с
300х300 - 0.31с
400х400 - 0.81с
500х500 - 1.77с
1000х1000 - 16.09с,
5000х5000 - еще считает, (думаю, будет чуть меньше часа).