对称矩阵的压缩储存讲解

  

<强>一、存储矩阵用一个二维数组即可。

  

对称矩阵的压缩储存讲解

  

<强>二,什么是对称矩阵:

  

设一个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

  

<强>总结

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

对称矩阵的压缩储存讲解