http://data.biancheng.net/view/188.html
稀疏矩阵的转置
需要经历以下 3 步:
- 将矩阵的行数和列数互换;
- 将三元组表(存储矩阵)中的 i 列和 j 列互换,实现矩阵的转置;
- 以 j 列为序,重新排列三元组表中存储各三元组的先后顺序;
稀疏矩阵快速转置算法和普通算法的区别仅在于第 3 步,快速转置能够做到遍历一次三元组表即可完成第 3 步的工作
稀疏矩阵的快速转置,在普通算法的基础上增设两个数组(假设分别为 array 和 copt):
- array 数组负责记录原矩阵每一列非 0 元素的个数。
- copt 数组用于计算稀疏矩阵中每列第一个非 0 元素在新三元组表中存放的位置。
copt数组
【1列首非0默认1】默认第一列首个非 0 元素存放到新三元组表中的位置为 1,
【前列位置+该列个数】然后后续各列首个非 0 元素存放到新三元组表的位置==前一列首个非 0 元素的存放位置加上该列非 0 元素的个数
通过 cpot[col] = cpot[col-1] + array[col-1] 公式可计算出后续各列首个非 0 元素存放到新三元组表的位置。
注意,cpot[col] = cpot[col-1] + array[col-1] 的意思是,后一列首个非 0 元素存放的位置等于前一列首个非 0 元素的存放位置加上该列非 0 元素的个数。由此可以看出,copt 数组才是最终想要的,而 array 数组的设立只是为了帮助我们得到 copt 数组。