<强>一、存储矩阵用一个二维数组即可。强>
<强>二,什么是对称矩阵:强>
设一个N * N的方阵,一个中任意元素Aij,当且仅当<代码> Aij==这个地方(0 & lt;=我& lt;=N-1&及0 & lt;=j & lt;=n - 1)> 代码,则矩阵一是对称矩阵。以矩阵的对角线为分隔,分为上三角和下三角
<强>三,对称矩阵的压缩储存:强>
压缩存储称矩阵存储时只需要存储上三角/下三角的数据,所以最多存储n (n + 1)/2个数据(相当于1 + 2 +…+ n,即等差数列求和)。
对称矩阵和压缩存储的对应关系:下三角存储i> j=, <代码> SymmetricMatrix[我][j]==Array[我* (i + 1)/2 + j] 代码>
<强>四、代码实现强>
# include};使用名称空间性病; template<类T> 类CompressionMatrix { 公众: CompressionMatrix (T * arr int sz) :_data(新T[深圳*(深圳+ 1)/2)) _size(深圳) { int指数=0;//压缩储存过程 for (int i=0; i<深圳;+ + i) { for (int j=0; j<深圳;+ + j) { 如果(i>=j)//_data中储存下三角的数据 { _data(指数)=arr (i *深圳+ j); 指数+ +; } 其他的 打破; } } }//获取某个坐标的数据,i和j代表该数据在矩阵中的横纵坐标 获取当前日期(int, int j) { 如果(i>=j)//下三角数据 { 返回_data[我* (i + 1)/2 + j]; }//上其他三角数据 { std:: swap (i, j);//将横坐标和从坐标值交换; 返回_data[我* (i + 1)/2 + j]; } }//打印矩阵的数据 空白PrintfMatrix () { for (int i=0; i< _size; + + i) { (int j=0; j< _size; + + j) { cout<& lt;获取当前日期(i, j) & lt; & lt;“”; } cout<& lt; endl; } } ~ CompressionMatrix () { 如果(_data !=NULL) { 删除[]_data; _data=https://www.yisu.com/zixun/NULL; _size=0; } } 保护: T * _data;//储存数据的数组 int _size;//储存原始对称矩阵的行数(或列数)
<强>测试代码:强>
int main () { int [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 *), 5);//将二维数组强制转换为一维数组指针,是问题更简单 cm.PrintfMatrix (); 返回0; }
<强>五、运行结果强>
O (∩_∩) O
<强>总结强>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接