龙华做网站的,做公司网站客户群体怎么找,宝山做网站,海洋网络网站建设点击蓝字关注我们来源于网络#xff0c;侵删1.矩阵乘法定义2.矩阵类封装我们用 C封装了一个n m 的矩阵类#xff0c;用二维数组来存储数据#xff0c;定义如下#xff1a;#define MAXN 1000
#define LL __int64class Matrix {
private:int n, m;LL** pkData;
public:Matri…点击蓝字关注我们来源于网络侵删1.矩阵乘法定义2.矩阵类封装我们用 C封装了一个n × m 的矩阵类用二维数组来存储数据定义如下#define MAXN 1000
#define LL __int64class Matrix {
private:int n, m;LL** pkData;
public:Matrix() : n(0), m(0) {pkData NULL;}void Alloc() {pkData new LL *[MAXN]; // 1)for (int i 0; i MAXN; i) {pkData[i] new LL[MAXN];}}void Dealloc() {if (pkData) {for (int i 0; i MAXN; i) { // 2)delete [] pkData[i];}delete[] pkData;pkData NULL;}}
};3.矩阵乘法实现1ijk 式最简单的矩阵乘法实现如下class Matrix {...
public:void Multiply_ijk(const Matrix other, Matrix ret) {// assert(m other.n);ret.Reset(n, other.m);int i, j, k;for (i 0; i n; i) {for (j 0; j other.m; j) {for (k 0; k m; k) {ret.pkData[i][j] pkData[i][k] * other.pkData[k][j];}}}}
};这种方法被称为 ijk 式对矩阵乘法 A × B C枚举 A 的每一行再枚举 B 的每一列分别对应相乘后放入矩阵 C的对应位置中如下图所示2ikj 式对上述算法进行一些改进交换两个内层循环的位置得到如下算法class Matrix {...
public:void Multiply_ikj(const Matrix other, Matrix ret) {// assert(m other.n);ret.Reset(n, other.m);int i, j, k;for (i 0; i n; i) {for (k 0; k m; k) {LL v pkData[i][k];for (j 0; j other.m; j) {ret.pkData[i][j] v * other.pkData[k][j];}}}}
};这种方法被称为ikj 式对矩阵乘法 A × B C 行优先枚举 A的每一个格子再枚举 B的每一行分别对应相乘后放入矩阵 C的对应位置中每次相乘得到的 C 都是部分积如下图所示用绿色的深浅来表示这个值是否已经完整求得3kij 式对上述算法再进行一些改进交换两个外层循环的位置得到如下算法class Matrix {...
public:void Multiply_kij(const Matrix other, Matrix ret) {// assert(m other.n);ret.Reset(n, other.m);int i, j, k;for (k 0; k m; k) {for (i 0; i n; i) {LL v pkData[i][k];for (j 0; j other.m; j) {ret.pkData[i][j] v * other.pkData[k][j];}}}}
};这种方法被称为kij 式对矩阵乘法 A × B C 列优先枚举 A的每一个格子再枚举 B的每一行分别对应相乘后放入矩阵 C 的对应位置中每次相乘得到的 C 都是部分积如下图所示用绿色的深浅来表示这个值是否已经完整求得4.时间测试5.原理分析原因是因为 CPU 访问内存的速度比 CPU 计算速度慢得多为了解决速度不匹配的问题在 CPU 与 内存 之间加了高速缓存cache。高速缓存 cache 的存在大大提高了 CPU 访问数据的速度。但是当内存访问不连续的时候就会导致 cache 命中率降低所以为了加速就要尽可能使内存访问连续即不要跳来跳去。矩阵6.最后结论运行速度ikj≈kijijk如果你年满18周岁以上又觉得学【C语言】太难想尝试其他编程语言那么我推荐你学Python现有价值499元Python零基础课程限时免费领取限10个名额▲扫描二维码-免费领取戳“阅读原文”我们一起进步