三重循环矩阵乘法运行时间比较
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; } }
相关文章推荐
- Intel和Microsoft C++编译器在矩阵乘法测试例子中运行时间的差异
- 普通矩阵乘法与分块矩阵运行时间测试
- 比较“+”,insert( )和append( )的速度,利用循环向列表中增加10000个元素,比较几种方法的运行时间。
- C++实现矩阵链乘法利用动态规划及运行实例结果
- <编程>比较两种素数表生成算法+计算程序运行时间+通过CMD重定向测试程序
- c++中计算运行时间 clock() clock_t 示例:比较递归和非递归数值运算
- 从九九乘法口决脚本,比较awk、bash/ksh和Perl的循环控制结构[附awk\shell\Perl脚本]
- C++实现矩阵链乘法利用动态规划及运行实例结果
- Hdu 4920 Matrix multiplication[矩阵乘法的时间复杂度优化]
- 循环执行时间JQuery 性能分析系列一 —— for与each性能比较
- 我们可以推测矩阵乘法最优解的时间复杂度么?
- PHP实现四种基础排序算法的运行时间比较(推荐)
- php四种基础排序算法的运行时间比较!
- 运行corba事件循环的线程比较靠谱的方式示例
- C++实现矩阵链乘法利用动态规划及运行实例结果
- 算法运行时间、logN、NlogN 之间的比较
- 计算labview一个while循环的运行时间
- c++中计算运行时间 clock() clock_t 示例:比较递归和非递归数值运算
- GRNN/PNN:基于GRNN、PNN两神经网络实现并比较鸢尾花种类识别正确率、各个模型运行时间对比—Jason niu
- 算法运行时间1、logN、N、NlogN 、N^2、N^3、2^n之间的比较