稀疏矩阵的压缩存储和转置

  

1,稀疏矩阵:M * N的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律。

2,稀疏矩阵的压缩存储:压缩存储值存储极少数的有效数据只,

,,由于非零元素分布没有任何规律,所以在进行压缩存储的时侯需要存储无效值的同时还要存储有效元素在矩阵中的位置,即有效元素所在的行号和列号,也就是在存储某个元素比如aij的值的同时,还需要存储该元素所在的行号我和它的列号j,这样就构成了一个三元组(i, j, aij)的线性表。

,,使用{行,坳,价值}三元组存储每一个有效数据,三元组按原矩阵中的位置,以行优先级先后顺序依次存放。

3,稀疏矩阵的转置:将原矩阵的行,列对换,也就是将[我][j]和[j][我]位置上的数据对换。

稀疏矩阵的压缩存储和转置”> </p> <p>具体实现如下:<br/> </p> <pre类= # include   using  namespace 性传播疾病;   # include   # include//向量是一个能够存放任意类型的动态数组,能够增加和压缩数据,也认为是容器   template   struct 三//三元组结构体   {   int  _row;   int  _col;   T  _value;//非法值/无效值   三()   :_row (0)   ,_col (0)   ,_value (0)   {}   三(int 行,int 坳,,T&,值)   :_row(行)   ,_col (col)   ,_value(值)   {}   };   template   class  SparseMatrix   {   公众:   SparseMatrix ();   SparseMatrix (T *,数组,,int  n, int  m, const  T&,无效);   ~ SparseMatrix ();   void 显示器();   SparseMatrix祝辞,_array;   size_t  _rows;   size_t  _cols;   T  _invalid;   };   template   SparseMatrix   SparseMatrix   SparseMatrix (i, j,数组(n *小姐:+,j]));//向量中push_back插入数据   }   }   }   }   template   void  SparseMatrix//时间复杂度为:O (_cols *有效数据个数),空间复杂度:O (1)   SparseMatrix稀疏矩阵的压缩存储和转置