您的位置:首页 > 其它

三重循环矩阵乘法运行时间比较

2014-04-24 19:11 274 查看
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
void Time(int n);
void fun1(int **A, int **B, int **C, int n);
void fun2(int **A, int **B, int **C, int n);
void fun3(int **A, int **B, int **C, int n);
void fun4(int **A, int **B, int **C, int n);
void fun5(int **A, int **B, int **C, int n);
void fun6(int **A, int **B, int **C, int n);

int main(int argc, char const *argv[])
{
int n;
for (n = 50; n <= 1000; n += 50)
{
Time(n);
cout << endl;
}

return 0;
}

void Time(int n)
{
int i, j, k, r;
int sum;
clock_t start, finish;
int **A, **B, **C;
A = new int *
;
B = new int *
;
C = new int *
;
for (i = 0; i != n; ++i)
{
A[i] = new int
;
B[i] = new int
;
C[i] = new int
;
}
for (i = 0; i != n; ++i)
for (j = 0; j != n; ++j)
{
A[i][j] = rand();
B[i][j] = rand();
C[i][j] = 0;
}
start = clock();
fun1(A, B, C, n);
finish = clock();
cout << (double)(finish-start)/CLOCKS_PER_SEC << "\t";

start = clock();
fun2(A, B, C, n);
finish = clock();
cout << (double)(finish-start)/CLOCKS_PER_SEC << "\t";

start = clock();
fun3(A, B, C, n);
finish = clock();
cout << (double)(finish-start)/CLOCKS_PER_SEC << "\t";

start = clock();
fun4(A, B, C, n);
finish = clock();
cout << (double)(finish-start)/CLOCKS_PER_SEC << "\t";

start = clock();
fun5(A, B, C, n);
finish = clock();
cout << (double)(finish-start)/CLOCKS_PER_SEC << "\t";

start = clock();
fun6(A, B, C, n);
finish = clock();
cout << (double)(finish-start)/CLOCKS_PER_SEC << "\t";

delete [] A;
delete [] B;
delete [] C;
}

void fun1(int **A, int **B, int **C, int n)
{
int i, j, k, sum;
for (i = 0; i != n; ++i)
for (j = 0; j != n; ++j) {
sum = 0;
for (k = 0; k != n; ++k)
sum += A[i][k] * B[k][j];
C[i][j] += sum;
}
}

void fun2(int **A, int **B, int **C, int n)
{
int i, j, k, sum;
for (j = 0; j != n; ++j)
for (i = 0; i != n; ++i) {
sum = 0;
for (k = 0; k != n; ++k)
sum += A[i][k] * B[k][j];
C[i][j] += sum;
}
}

void fun3(int **A, int **B, int **C, int n)
{
int i, j, k, r;
for (j = 0; j != n; ++j)
for (k = 0; k != n; ++k) {
r = B[k][j];
for (i = 0; i != n; ++i)
C[i][j] += A[i][k] * r;
}
}

void fun4(int **A, int **B, int **C, int n)
{
int i, j, k, r;
for (k = 0; k != n; ++k)
for (j = 0; j != n; ++j) {
r = B[k][j];
for (i = 0; i != n; ++i)
C[i][j] += A[i][k] * r;
}
}

void fun5(int **A, int **B, int **C, int n)
{
int i, j, k, r;
for (k = 0; k != n; ++k)
for (i = 0; i != n; ++i) {
r = B[i][k];
for (j = 0; j != n; ++j)
C[i][j] += B[k][j] * r;
}
}

void fun6(int **A, int **B, int **C, int n)
{
int i, j, k, r;
for (i = 0; i != n; ++i)
for (k = 0; k != n; ++k) {
r = B[i][k];
for (j = 0; j != n; ++j)
C[i][j] += B[k][j] * r;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐