基于三元组的矩阵乘积算法


求矩阵乘积Q=MxN,采用行逻辑链接存储表示。

例:M=,N=。Q=MxN,Q=。

三元组

M.data N.data Q.data
i j e i j e i j e
1 1 3 1 2 2 1 2 6
1 4 5 2 1 1 2 1 -1
2 2 -1 3 1 -2 2 1 -1
3 1 2 3 2 4 3 2 4

rpos[row]指示矩阵的第row行中第一个非零元在对应的三元组表中的序号,那么rpos[row+1]-1表示row行最后一个非零元在对应三元组表中的序号,而最后一行最后一个非零元在对应的三元组中位置为tu。

  M.对应的rpos N.对应的rpos Q.对应的rpos
row 1 2 3 1 2 3 4 1 2 3
rpos[row] 1 3 4 1 2 3 5 1 2 3
Status MulSMatrix(RLSMatrix M, RLSMatrix N, RLSMatrix Q){
    if(M.nu != Nmu) return ERROR;
    Q.mu = M.mu; Q.nu = N.nu; Q.tu = 0; int ccol;
    if(M.tu * M.tu != 0){
        for(int arrow=1; arrow<=M.mu; ++arow){
            int ctemp[M.nu] = 0;    //临时存储数乘组的数组
            Q.rpos[arow] = Q.tu+1;    //第一行第一个非零元必定为1
            int tp;
            if(arowMAXSIZE) return ERROR;    //不能超出范围
                    Q.data[Q.tu] = (arow, ccol, ctemp[ccol]);
                    ++Q.tu;
                }
            }
        }
    }
}
//其中代码
Q.data[Q.tu] = (arow, ccol, ctemp[ccol]);
//可理解为
Q.data[Q.tu].i = arow;
Q.data[Q.tu].j = ccol;
Q.data[Q.tu].e = ctemp[ccol];