1 题目描述
2 思路分析
3 解法
4 小结
1 题目描述
请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法。
2 思路分析
根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵,它的一个元素其中 1 ≤ i ≤ m, 1 ≤ j ≤ p。
image.png
值得一提的是,矩阵乘法满足结合律和分配率,但并不满足交换律,如下图所示的这个例子,两个矩阵交换相乘后,结果变了:
image.png
3 解法
解法一、暴力解法
根据矩阵的性质,通过三个for循环,即可完成计算。其实,通过前面的分析,我们已经很明显的看出,两个具有相同维数的矩阵相乘,其复杂度为O(n^3)
//方法1:暴力解
//根据矩阵的性质i*j=i*n+n*j直接计算
public static void directCal(){
int [][]matrix1 = { {1,2},{3,4}};
int [][]matrix2 = { {4,5},{6,7}};
int [][]matrix3 = { {0,0},{0,0}};
int n =