稀疏矩阵的压缩

  


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

例如下面的矩阵

稀疏矩阵的压缩

稀疏矩阵的压缩存储

压缩矩阵值存储极少数的有效数据。使用三元组来存储每一个数据,三元组数据按照矩阵中的位置,以依次存放。

则上述矩阵的存储结构为

稀疏矩阵的压缩


//三元组的定义   template   struct 三倍   {   公众://默认无参构造函数   三()   {}//构造函数   三(const  T&, d, size_t 行=0,size_t 坳=0)   :_value (d)   _row(行)   _col (col)   {}   公众:   T  _value;//数据域   size_t  _row;//行   size_t  _col;//列   };

template   class  SparseMatrix   {   公众://无参构造函数   SparseMatrix ()   {}   SparseMatrix (const  T *,,, size_t 行,size_t ,上校,const  T&,无效);   void 显示器();//打印   SparseMatrix祝辞,_a;//三元组类型的顺序表   size_t  _rowSize;//行数   size_t  _colSize;//列数   T  _invalid;//非法值   };//矩阵的压缩   template   SparseMatrix((我* col  +, j],,我,,j));//不能通过数组创建,但是可以通过数组形式访问   }   }   }   }



将原矩阵的行,列互换,也就是将(行)(col)和(col)(行)位置上的数据对换。

稀疏矩阵的压缩


算法思想:

实现代码

//列转置   template   SparseMatrix (_a(指数)._value, _a(指数)._col, _a[指数]._row));//按照列优先的顺序存到压缩数组中   }   }   }   return 结果;   }

算法分析:


一次定位快速转置

算法思想:


上述矩阵的两个数组为:

稀疏矩阵的压缩

代码实现:

//快速转置   template   SparseMatrix稀疏矩阵的压缩