稀疏矩阵的存储压缩.pptVIP

  • 17
  • 0
  • 约6.12千字
  • 约 29页
  • 2019-08-31 发布于四川
  • 举报
稀疏矩阵的存储压缩 稀疏矩阵 (Sparse Matrix) 用三元组表表示的稀疏矩阵及其转置 稀疏矩阵转置算法思想 设矩阵列数为 Cols,对矩阵三元组表扫描Cols 次。第 k 次检测列号为 k 的项。 第 k 次扫描找寻所有列号为 k 的项,将其行号变列号、列号变行号,顺次存于转置矩阵三元组表。 设矩阵三元组表总共有 Terms 项,其时间代价为 O ( Cols* Terms )。 若矩阵有 200 行,200 列,10,000 个非零元素,总共有 2,000,000 次处理。 用三元组表表示的稀疏矩阵及其转置 快速转置算法 建立辅助数组 rowSize 和 rowStart,记录矩阵转置后各行非零元素个数和各行元素在转置三元组表中开始存放位置。 扫描矩阵三元组表,根据某项的列号,确定它转置后的行号,查 rowStart 表,按查到的位置直接将该项存入转置三元组表中。 转置时间代价为 O(max(Terms, Cols))。若矩阵有 200 列,10000 个非零元素,总共需要10000 次处理。 稀疏矩阵 在矩阵操作(+、-、*、/)时矩阵非零元素会发生动态变化,用稀疏矩阵的链接表示可适应这种情况。 稀疏矩阵的链接表示采用正交链表:行链表与列链表十字交叉。 行链表与列链表都是带表头结点的循环链表。用表头结点表征是第几行,第几列。 稀疏矩阵的结点 稀疏矩阵的删除 为执行稀疏矩阵的删除,需要使用可利用空间表来管理回收的空间。 可利用空间表是单链表结构,只允许在表头插入或删除,其表头指针为av。 使用可利用空间表,可以高效地回收循环链表。 如果需要建立新的稀疏矩阵,还可以从可利用空间表中分配结点。 * * 行数m = 6, 列数n = 7, 非零元素个数t = 6 2.4 稀疏矩阵 稀疏矩阵(SparseMatrix)的抽象数据类型 template class Type class SparseMatrix { int Rows, Cols, Terms; //行/列/非零元素数 TritupleType smArray[MaxTerms]; public: //三元组表 SparseMatrix ( int MaxRow, int Maxcol ); SparseMatrixType Transpose ( ); //转置 SparseMatrixType //相加 Add ( SparseMatrixType b ); SparseMatrixType //相乘 Multiply ( SparseMatrixType b ); } A的三元组顺序表图示 A = 0 12 9 0 0 0 0 0 0 0 0 0 0 0 -3 0 0 0 0 14 0 0 0 24 0 0 0 0 0 18 0 0 0 0 0 15 0 0 -7 0 0 0 row col val 0 1 2 3 4 5 6 7 8 3 1 -3 6 1 15 1 2 12 5 2 18 1 3 9 4 3 24 6 4 -7 3 6 14 三元组 (Trituple) 类的定义 templateclass Type class SparseMatrixType; templateclass Type class Trituple { friend class SparseMatrix Type private: int row, col; //非零元素所在行号/列号 Type value; //非零元素的值 } 稀疏矩阵 转置矩阵 稀疏矩阵的转置 template class Type SparseMatrixType SparseMatrixType:: Transpose ( ) { SparseMatrixType b ( Cols, Rows ); b.Rows = Cols; b.Cols = Rows; b.Terms = Terms; //转置矩阵的列数,行数和非零元素个数 if ( Terms 0 ) { int CurrentB = 0

文档评论(0)

1亿VIP精品文档

相关文档