三重循环矩阵乘法运行时间比较
来源:互联网 发布:煎饼侠 知乎 编辑:程序博客网 时间:2024/06/05 20:52
#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 *[n];B = new int *[n];C = new int *[n];for (i = 0; i != n; ++i){A[i] = new int [n];B[i] = new int [n];C[i] = new int [n];}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;}}
0 0
- 三重循环矩阵乘法运行时间比较
- 普通矩阵乘法与分块矩阵运行时间测试
- 大矩阵乘法时间开销
- Intel和Microsoft C++编译器在矩阵乘法测试例子中运行时间的差异
- 程序碎片- 矩阵乘法优化(dp,循环)
- 汇编—多重循环—矩阵乘法
- 矩阵快速幂模板(可以在二重循环或者三重循环的地方取模)
- C#大矩阵乘法时间的开销
- 利用三重循环“穷举”
- poj3150 && LA3704 Cellular Automaton 矩阵乘法 + 循环矩阵性质
- 【bzoj2510】弱题 概率dp+循环矩阵矩阵乘法
- BZOJ 2510 弱题 概率 矩阵乘法 循环矩阵
- poj_3150 Cellular Automaton(循环矩阵+矩阵乘法)
- POJ_3150_矩阵快速幂+循环矩阵的乘法
- POJ_3150_矩阵快速幂+循环矩阵的乘法
- HDU2807:The Shortest Path(矩阵乘法+快速矩阵比较+Floyd)
- 使用三重嵌套循环暴力查找勾股数及不同算法的比较(Pythagorean Triples)
- 用Java的循环实现矩阵乘法代码
- CentOS Linux下VNC Server远程桌面配置详解
- linux 查看端口
- 《JavaScript DOM 编程艺术》 第7章 笔记
- 游戏服务器到底该选哪种网络协议(2)
- sqlserver表分区步骤
- 三重循环矩阵乘法运行时间比较
- HDU1010
- 博客新开通
- HBase 在淘宝的应用和优化
- linux服务配置之DNS服务
- 计算图像的拉普拉斯变换,使用方向滤波器检测边缘
- Puzzle over “goto” goto背后发生了什么
- resin 配置多个实例
- CF 421D--Bug in code