M * N矩阵,矩阵中有效值的个数远远小于无效值的个数,并且这些数据的分布没有规律。
例如下面的矩阵
稀疏矩阵的压缩存储
压缩矩阵值存储极少数的有效数据。使用三元组来存储每一个数据,三元组数据按照矩阵中的位置,以依次存放。
则上述矩阵的存储结构为
//三元组的定义 templatestruct 三倍 { 公众://默认无参构造函数 三() {}//构造函数 三(const T&, d, size_t 行=0,size_t 坳=0) :_value (d) _row(行) _col (col) {} 公众: T _value;//数据域 size_t _row;//行 size_t _col;//列 };
templateclass 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)(行)位置上的数据对换。
算法思想:
实现代码
//列转置 templateSparseMatrix (_a(指数)._value, _a(指数)._col, _a[指数]._row));//按照列优先的顺序存到压缩数组中 } } } return 结果; }
算法分析:
一次定位快速转置
算法思想:
上述矩阵的两个数组为:
代码实现:
//快速转置 templateSparseMatrix 稀疏矩阵的压缩