矩阵的存储及转置算法剖析.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
矩阵的存储及转置算法剖析

矩阵的存储及转置算法 本文要点: 1.对称矩阵与稀疏矩阵 2.两种矩阵的压缩存储 3.代码实现两种矩阵 对称矩阵SymmetryMatrix 1.对称矩阵也是一种特殊矩阵,满足Aij = Aji(设矩阵为A,且有0=iN-1 0=jN-1),这种矩阵以对角线分割为上三角和下三角,关于对角线对称的元素相等。 2.对称矩阵的压缩存储 如果把矩阵中的每个元素都存储起来,那么就会显得浪费空间,因为每两个关于对角线对称的元素相等,因此就可以将矩阵压缩存储到一个数组Array中,即:将对称的两个元素存一份,对角线上的元素都存储起来,也就是说只存储上三角或下三角,那么存储的元素的总个数就为n(n+1)/2个,这样,当n特别大的时候,也就最有效。 压缩存储的数组与矩阵之间满足:Array[i*(i+1)/2+j] = Martix[i][j](下三角存储i=j) 3.代码实现 [cpp]?view plain?copy ? templateclass?T?? class?SymmetryMatrix?? {?? public:?? ????SymmetryMatrix(const?T*?a,size_t?n)?? ????????:_matrix(new?T[n*(n+1)/2])?? ????????,_size(n*(n+1)/2)?? ????????,_n(n)?? ????{?? ????????size_t?index?=?0;???//表示一维数组的下标?? ????????for?(size_t?i=0;?in;?++i)?? ????????{?? ????????????for?(size_t?j=0;?jn;?++j)?? ????????????{?? ????????????????if?(i?=?j)??????//存储下三角?? ????????????????{?? ????????????????????_matrix[index++]?=?a[i*n+j];?? ????????????????????//index++;?? ????????????????}?? ????????????????else?? ????????????????????continue;?? ????????????}?? ????????}?? ????}?? ?? ????T?Access(size_t?row,size_t?col)????//访问数据?? ????{?? ????????if?(row??col)?? ????????{?? ????????????std::swap(row,col);?? ????????}?? ????????return?_matrix[row*(row+1)/2+col];?? ????}?? ?? ????void?Display()?? ????{?? ????????for?(size_t?i=0;?i_n;?i++)?? ????????{?? ????????????for?(size_t?j=0;?j_n;?j++)?? ????????????{?? ????????????????coutAccess(i,j)?;?? ????????????}?? ????????????coutendl;?? ????????}?? ????}?? protected:?? ????T*?_matrix;?????//压缩存储的一维数组?? ????size_t?_size;???//可存储的大小?? ????size_t?_n;??????//行列的大小??????? };?? 稀疏矩阵SparseMatrix 1.稀疏矩阵中,有效数据(非0)的数量远小于非法数据的个数(0为非法数据) 2.稀疏矩阵的存储也是压缩存储的,但与对称矩阵不同的地方有两点: (1)稀疏矩阵的压缩存储只存储有效值; (2)稀疏矩阵存储以行优先的顺序存储在三元组中,表示为:{row,col,value},row和col分别表示该有效值的行和列。 一、存储及输出 存储的方法类似于对称矩阵的存储,但要将行和列也进行存储; 输出的时候多考虑表示数组的下标会不会越界 [cpp]?view plain?copy ? //数据的存储?? SpareMatrix(const?T*?a,size_t?row,size_t?col,const?T?invalid)?? ????:_rowSize(row)?? ????,_colSize(col)?? ????,_invalid(invalid)?? {?? ????for(size_t?i=0;?irow;?i++)?? ????{?? ????????for

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档