三元组转置

稀疏矩阵定义

假设m行n列的矩阵含t个非零元素,则称

三元组转置

为稀疏因子,通常认为稀疏因子<=0.05的矩阵为稀疏矩阵

三元组

系数矩阵的每个非零元素通过三元组(行号,列号,值)

注:三元组顺序表中的元素是按行递增存放的,当行相等时按列递增存放

三元组转置

如下图三元组

三元组转置

转置过程如下图所示,两个for循环,外层循环定位转置后三元组表(定位下个元素应该放在哪),内层循环遍历转置前的三元组表(寻找下个要放进转置后三元组表的元素)

三元组转置

注:三元组行增和行内列增的性质使我们可以寻找到“下一个元素”就插入到转置后矩阵的三元组表(认真体会)

算法时间复杂度T(n)=O(原矩阵的列数 x 非零元的个数),若非零元个数与m x n相同数量级,则T(n)=O(m x n^2)

三元素快速转置

前提:

  1. 转置前矩阵每一列(col)中非零元素个数(自己看):num[col]
  2. 转置前矩阵每一列中第一个非零元素在转置后三元组表中的位置(可以由1计算出):cpot[col]    
三元组转置
由前提1得到前提2如下所示:
三元组转置

转置过程如下所示:

三元组转置

算法时间复杂度T(n)=O(原矩阵的列数 + 非零元的个数),若非零元个数与m x n相同数量级,则T(n)=O(m x n)