时间:2021-05-19
一、存储矩阵用一个二维数组即可;
二、什么是对称矩阵:
设一个N*N的方阵A,A中任意元素Aij,当且仅当 Aij == Aji(0 <= i <= N-1&& 0 <= j <= N-1),则矩阵A是对称矩阵。以矩阵的对角线为分隔,分为上三角和下三角
三、对称矩阵的压缩储存:
压缩存储称矩阵存储时只需要存储上三角/下三角的数据,所以最多存储n(n+1)/2个数据(相当于1+2+…+n,即等差数列求和)。
对称矩阵和压缩存储的对应关系:下三角存储i>=j, SymmetricMatrix[i][j] ==Array[i*(i+1)/2+j]
四、代码实现
#include<iostream>using namespace std;template<class T>class CompressionMatrix{public: CompressionMatrix(T* arr,int sz) :_data(new T[sz*(sz+1)/2]) ,_size(sz) { int index=0; //压缩储存过程 for(int i=0;i<sz;++i) { for(int j=0;j<sz;++j) { if (i>=j)//_data中储存下三角的数据 { _data[index]=arr[i*sz+j]; index++; } else break; } } } //获取某个坐标的数据,i和j代表该数据在矩阵中的横纵坐标 T GetDate(int i,int j) { if (i>=j)//下三角数据 { return _data[i*(i+1)/2+j]; } else//上三角数据 { std::swap(i,j);//将横坐标和从坐标值交换; return _data[i*(i+1)/2+j]; } } //打印矩阵的数据 void PrintfMatrix() { for (int i=0;i<_size;++i) { for (int j=0;j<_size;++j) { cout<<GetDate(i,j)<<" "; } cout<<endl; } } ~CompressionMatrix() { if (_data!=NULL) { delete[] _data; _data=NULL; _size=0; } }protected: T* _data;//储存数据的数组 int _size;//储存原始对称矩阵的行数(或列数)};测试代码:
int main(){ int a[5][5]= { {0,1,2,3,4}, {1,0,1,2,3}, {2,1,0,1,2}, {3,2,1,0,1}, {4,3,2,1,0}, }; CompressionMatrix<int> cm((int*)a,5);//将二维数组强制转换为一维数组指针,是问题更简单 cm.PrintfMatrix(); return 0;}五、运行结果
O(∩_∩)O
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
对称矩阵及稀疏矩阵的压缩存储1.稀疏矩阵 对于那些零元素数目远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称为稀疏矩阵(sparse)。 人们无法给出
本文实例讲述了C#判断一个矩阵是否为对称矩阵及反称矩阵的方法。分享给大家供大家参考。具体如下:1.判断对称矩阵对任意i和j,有a[i,j]=a[j,i]////
C++实现稀疏矩阵的压缩存储的实例稀疏矩阵:M*N的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律。稀疏矩阵的压缩存储:压缩存储值存储极少
稀疏矩阵-sparsepfromscipyimportsparse稀疏矩阵的储存形式在科学与工程领域中求解线性模型时经常出现许多大型的矩阵,这些矩阵中大部分的元
本文实例讲述了C#实现将一个矩阵分解为对称矩阵与反称矩阵之和的方法。分享给大家供大家参考。具体如下:1.理论依据对任意n阶方阵A,有A=(A+T(A))/2+(