三元组转置
稀疏矩阵定义
假设m行n列的矩阵含t个非零元素,则称
为稀疏因子,通常认为稀疏因子<=0.05的矩阵为稀疏矩阵
三元组
系数矩阵的每个非零元素通过三元组(行号,列号,值)
注:三元组顺序表中的元素是按行递增存放的,当行相等时按列递增存放
三元组转置
如下图三元组
转置过程如下图所示,两个for循环,外层循环定位转置后三元组表(定位下个元素应该放在哪),内层循环遍历转置前的三元组表(寻找下个要放进转置后三元组表的元素)
注:三元组行增和行内列增的性质使我们可以寻找到“下一个元素”就插入到转置后矩阵的三元组表(认真体会)
算法时间复杂度T(n)=O(原矩阵的列数 x 非零元的个数),若非零元个数与m x n相同数量级,则T(n)=O(m x n^2)
三元素快速转置
前提:
- 转置前矩阵每一列(col)中非零元素个数(自己看):num[col]
- 转置前矩阵每一列中第一个非零元素在转置后三元组表中的位置(可以由1计算出):cpot[col]
由前提1得到前提2如下所示:
转置过程如下所示:
算法时间复杂度T(n)=O(原矩阵的列数 + 非零元的个数),若非零元个数与m x n相同数量级,则T(n)=O(m x n)