1 条题解
-
0
矩阵乘法题解
题目概述
本题要求实现两个矩阵的乘法运算。给定一个 的矩阵 和一个 的矩阵 ,计算它们的乘积 ,其中 是一个 的矩阵。
矩阵乘法原理
矩阵乘法的定义如下:对于结果矩阵 中的每个元素 ,有:
这意味着 是矩阵 的第 行与矩阵 的第 列对应元素乘积的和。
算法思路
- 输入处理:读取矩阵 和 的维度及元素值
- 结果初始化:创建一个 的矩阵 ,初始值全为0
- 三重循环计算:
- 外层循环遍历 的行( 从 0 到 )
- 中层循环遍历 的列( 从 0 到 )
- 内层循环遍历公共维度( 从 0 到 ),累加 到
- 输出结果:按行输出矩阵
代码实现
#include <iostream> using namespace std; int main() { int n, m, p; // 读取矩阵A的维度 cin >> n >> m; // 定义矩阵A、B和结果矩阵C int A[105][105], B[105][105], C[105][105]; // 读取矩阵A for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> A[i][j]; } } // 读取矩阵B的列数 cin >> p; // 读取矩阵B for (int i = 0; i < m; i++) { for (int j = 0; j < p; j++) { cin >> B[i][j]; } } // 初始化结果矩阵C for (int i = 0; i < n; i++) { for (int j = 0; j < p; j++) { C[i][j] = 0; } } // 矩阵乘法计算 for (int i = 0; i < n; i++) { for (int j = 0; j < p; j++) { for (int k = 0; k < m; k++) { C[i][j] += A[i][k] * B[k][j]; } } } // 输出结果矩阵C for (int i = 0; i < n; i++) { for (int j = 0; j < p; j++) { cout << C[i][j]; if (j < p - 1) { cout << " "; } } cout << endl; } return 0; }
复杂度分析
- 时间复杂度:,由三重循环决定
- 空间复杂度:,用于存储三个矩阵
注意事项
- 矩阵乘法不满足交换律,即
- 矩阵 的列数必须等于矩阵 的行数才能进行乘法运算
- 结果矩阵 的行数等于 的行数,列数等于 的列数
- 在代码实现中,数组大小应略大于最大可能维度(如105),防止越界
示例演示
以题目样例为例:
输入: 2 3 1 2 3 3 2 1 2 1 1 2 2 3 3 计算过程: C[0][0] = 1×1 + 2×2 + 3×3 = 1 + 4 + 9 = 14 C[0][1] = 1×1 + 2×2 + 3×3 = 1 + 4 + 9 = 14 C[1][0] = 3×1 + 2×2 + 1×3 = 3 + 4 + 3 = 10 C[1][1] = 3×1 + 2×2 + 1×3 = 3 + 4 + 3 = 10 输出: 14 14 10 10
这道题是线性代数和算法实现的基础题目,掌握矩阵乘法对于理解更复杂的数值计算和机器学习算法至关重要。
- 1
信息
- ID
- 3432
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者