问题描述:给定两个大矩阵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

本文探讨Strassen算法在矩阵乘法中的应用,采用分治策略,通过7次乘法运算来提高效率。文章详细介绍了算法思想,并提供了矩阵乘法模板类的实现,最终展示运行结果。
最低0.47元/天 解锁文章
1567

被折叠的 条评论
为什么被折叠?



