5.2.2 稀疏矩阵的压缩存储方法 二、行逻辑链接的顺序表 算法 5.3 bool MultSMatrix(RLSMatrix M, RLSMatrix N, RLSMatrix &Q) { // 采用行逻辑链接存储表示,求矩阵乘积Q=M N。 if (M.Num_cols != N.Num_rows) return FALSE; // M的列数和N的行数不等,不能相乘 if (M.tu*N.tu != 0) { // M和N中均含有非零元对矩阵Q进行初始化; for (arow=1; arow<=M. rows; ++arow) { 处理M(即Q)的每一行 } // 求得 Q 中第crow( =arow)行的非零元 for (ccol=1; ccol<=Q.nu; ++ccol)// 压缩存储该行非零元 if (ctemp[ccol-1]) { if (++Q.terms > MAXTERMS) return FALSE; Q.data[Q.terms] = (arow, ccol, ctemp[ccol]); } // if } // for arow } // if return TRUE; } // MultSMatrix 算法5.3的时间复杂度为O
(M.rows×N.cols+M.terms×N.terms/N.rows)。 |
其中: 对矩阵Q进行初始化的操作如下: Q.rows = M.rows;// Q的行数和M相同 Q.cols = N.cols;// Q的列数和N相同 Q.terms = 0; // Q的非零元个数初始化为零 求得Q中一行非零元的操作为: |