n阶矩阵一般乘法-《算法导论》学习笔记五
来源:互联网 发布:做淘宝新手怎么找货源 编辑:程序博客网 时间:2024/06/05 05:08
A、B两个矩阵均是nxn的矩阵,则两个矩阵的乘法:
一般的矩阵乘法代码:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <time.h>class SquareMatrix {public: SquareMatrix(){} SquareMatrix( int row, int col ): mRow(row), mCol(col) { Init(); } ~SquareMatrix() { for ( int i = 0; i < mRow; i++ ) { delete[] mElement[i]; //printf("delete %d\n", i); } delete[] mElement; } void Init() { mElement = new int*[mRow]; for ( int i = 0; i < mCol; i++ ) { mElement[i] = new int[i]; } } void SetElement( int lowV, int upV ) { int size = upV - lowV; for ( int i = 0; i < mRow; i++ ) { for ( int j = 0; j < mCol; j++ ) { mElement[i][j] = rand() % size + lowV; } } } void PrintElement() { printf("=========================================\n"); for ( int i = 0; i < mRow; i++ ) { for ( int j = 0; j < mCol; j++ ) { printf("%d ", mElement[i][j]); } printf("\n"); } printf("=========================================\n"); }public: int mRow; int mCol; int *(*mElement);};void SquareMatrixMultiply( SquareMatrix &a, SquareMatrix &b, SquareMatrix &c ){ int n = a.mRow; c.mRow = c.mCol = n; c.Init(); for ( int i = 0; i < n; i++ ) { for ( int j = 0; j < n; j++ ) { c.mElement[i][j] = 0; for ( int k = 0; k < n; k++ ) { c.mElement[i][j] += a.mElement[i][k] * b.mElement[j][k]; } } }}int main( int argc, char **argv ) { if ( argc != 2 ) { printf("Usage:./binaryfile num\n"); exit( 0 ); } int n = atoi( argv[1] ); SquareMatrix smA( n, n ), smB( n, n ), smC; smA.SetElement( 1, 10 ); smA.PrintElement(); smB.SetElement( 1, 10 ); smB.PrintElement(); SquareMatrixMultiply( smA, smB, smC ); smC.PrintElement(); printf("init square matrix finished\n"); return 0;}
算法复杂度为O(n^3),而Stranssen算法通过分治法将大矩阵切分为小矩阵进行计算,算法复杂度可以降低为O(n^2.81),但是尝试写下代码,发现切割子矩阵时有点复杂,普通的切分会创建子矩阵并复制值,而用下标进行计算又比较复杂,下次有空再尝试写吧。
0 0
- n阶矩阵一般乘法-《算法导论》学习笔记五
- 《算法导论》学习笔记之Chapter4.2矩阵乘法Strassen
- 【算法导论】矩阵乘法
- 算法导论学习笔记(8)——动态规划之矩阵链乘法
- 算法导论-矩阵链乘法
- 矩阵链乘法 算法导论
- 矩阵链乘法--【算法导论】
- 【算法导论】矩阵链乘法
- 算法导论--------------Strassen矩阵乘法
- 算法导论之矩阵乘法
- 算法导论 矩阵链乘法
- 《算法导论》笔记 第15章 15.2 矩阵链乘法
- 【算法导论】矩阵乘法strassen算法
- 算法导论-矩阵乘法-strassen算法
- 算法导论学习笔记之五--同时得到最大和最小值复杂度3(n/2)
- [算法导论读书笔记]矩阵链乘法
- 算法导论十五章--矩阵链乘法
- 算法导论 动态规划 矩阵链乘法
- L2-015. 互评成绩
- JBPM使用详解
- hdu 3786 找出直系亲属 (DFS)
- 注释
- 第4节 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用【Linux内核分析】
- n阶矩阵一般乘法-《算法导论》学习笔记五
- 多线程
- smart基本命令
- intellij idea 导出可发布的maven web 项目
- Minimum Absolute Difference in BST
- OpenCv-python之基础图像知识
- Spring Session + Redis实现分布式Session共享
- TensorFlow基础知识点(六)/矩阵基本操作
- CSS3实现优酷轮播图