就可实现三元组的矩阵转置。 这里关键是如何重排三元组里的次序。
6 6 8 1 1 15 1 4 22 1 6 -15 2 2 11 2 3 3 3 4 -6 5 1 91 6 3
28
6 6 8 1 1 15 4 1 22 6 1 -15 2 2 11 3 2 3 4 3 -6 1 5 91 3 6
28
6 6 8 1 1 15 1 5 91 2 2 11 3 2 3 3 6 28 4 1 22 4 3 -6 6 1
-15
T = => B =
§5.2.2 矩阵相乘
两个矩阵相乘是另一种常用的矩阵运算。
设: C = A × B
A=(aij)为m×s的矩阵,B=(bij)是s×n的矩阵,则矩阵A与矩阵B相乘将得到一个m×n的矩阵C=(cij),其中
cij=ai1b1j + ai2b2j + …… + aisbsj (i = 1 , 2 ,…, m j = 1 , 2 ,…, n) 对于非压缩矩阵,算法如下:
for i := 1 to m do
for j := 1 to n do begin
C[ i , j ] := 0;
for k := 1 to s do
C[ i , j ] := C[ i , j ] + A[ i , k ] * B[ k , j ];
end;
当A和B是稀疏矩阵,并分别用三元组M、N存储时,应如何处理?
注意 1:两个稀疏矩阵相乘的积不一定是稀疏矩阵;
2:即使cij=ai1b1j + ai2b2j + …… + aisbsj中的每个分项aikbkj均不为零,其累加值Cij也有可能为零。
【练习】输入M、N两个三元组,分别表示A、B两个稀疏矩阵,请计算A、B的乘积C,
输出C的(压缩存储)三元组Y。 输入格式: (输入文件 syz.in)
第1行: i1 j1 v1 (分别表示A的行数、列数、非零元素个数) 第2至v1+1行: ai aj av (行下标、列下标、元素的值) 第v1+2行: i2 j2 v2 (B的行数、列数、非零元素个数) 第v1+3至v1+v2+2行:bi bj bv 输出格式: (输出文件 syz.out)
第1行: i3 j3 v3 (C的行数、列数、非零元素个数)