311.稀疏矩阵乘法
Closed this issue · 0 comments
SinCatGit commented
题目
给定两个 稀疏矩阵 A 和 B,返回AB的结果。
您可以假设A的列数等于B的行数。
示例 1:
输入:
[
[ 1, 0, 0],
[-1, 0, 3]
]
[
[7, 0, 0],
[0, 0, 0],
[0, 0, 1]
]
输出:
[
[ 7, 0, 0],
[-7, 0, 3]
]
解释:
A = [
[ 1, 0, 0],
[-1, 0, 3]
]
B = [
[ 7, 0, 0 ],
[ 0, 0, 0 ],
[ 0, 0, 1 ]
]
| 1 0 0 | | 7 0 0 | | 7 0 0 |
AB = | -1 0 3 | x | 0 0 0 | = | -7 0 3 |
| 0 0 1 |
思路:
稀疏矩阵的特点是矩阵中绝大多数的元素为0,而相乘的结果是还应该是稀疏矩阵,即还是大多数元素为0,那么我们使用传统的矩阵相乘的算法肯定会处理大量的0乘0的无用功,所以核心思路是只做非零的乘法运算。
一个 i x k 的矩阵A乘以一个 k x j 的矩阵B会得到一个 i x j 大小的矩阵C。
C[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + ... + A[i][k]*B[k][j]
那么为了不重复计算0乘0,首先遍历A数组,要确保A[i][k]不为0,才继续计算,然后遍历B矩阵的第k行,如果B[K][J]不为0,我们累加结果矩阵res[i][j] += A[i][k] * B[k][j]