问题描述:给定两个大矩阵A和B,计算矩阵C=A*B
Strassen算法思想:
分治策略,定义7次乘法运算。
具体实现:
首先定义了矩阵乘法模板类
//定义模板矩阵乘法类
template<class T>
class Strassen_Matrix_Mul
{
public:
void ADD(T **Matrix_A, T **Matrix_B, T **Matrix_Result, int MatrixSize);//矩阵加法
void SUB(T **Matrix_A, T **Matrix_B, T **Matrix_Result, int MatrixSize);//矩阵减法
void MUL(T **Matrix_A, T **Matrix_B, T **Matrix_Result, int MatrixSize);//矩阵乘法
void FillMatrix(T **Matrix_A, T **Matrix_B,int MatrixSize);//矩阵填充,矩阵生成函数
void PrintMatrix(T **Matrix_A, int MatrixSize);//矩阵输出函数
void Strassen(T **Matrix_A, T **Matrix_B, T **Matrix_C, int MatrixSize,int Threshold);
};
并实现相关函数
ADD(T **Matrix_A, T **Matrix_B, T **Matrix_Result, int MatrixSize)
{
for (int i = 0; i < MatrixSize; i++)
{
for (int j = 0; j < MatrixSize; j++)
{
Matrix_Result[i][j] = Matrix_A[i][j] + Matrix_B[i][j];
}
}
}
SUB(T **Matrix_A, T **Matrix_B, T **Matrix_Result, int MatrixSize)
{
for (int i = 0; i < MatrixSize; i++)
{
for (int j = 0; j < MatrixSize; j++)
{
Matrix_Result[i][j] = Matrix_A[i][j] - Matrix_B[i][j];
}
}
}
MUL(T **Matrix_A, T **Matrix_B, T **Matrix_Result, int MatrixSize)
{
for (int i = 0; i < MatrixSize; i++)
{
for (int j = 0; j < MatrixSize; j++)
{
Matrix_Result[i][j] = 0;
for (int k = 0; k < MatrixSize; k++)
{
Matrix_Result[i][j] = Matrix_Result[i][j] + Matrix_A[i][k] * Matrix_B[k][j];
}
}
}
}
FillMatrix(T **Matrix_A, T **Matrix_B, int MatrixSize)
{
for (int row = 0; row < MatrixSize; row++)
{
for (int column = 0; column < MatrixSize; column++)
{
Matrix_B[row][column] = (Matrix_A[row][column] =