对称矩阵:
设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 <= i <= N-1 && 0 <= j <= N-1),则矩阵A是对称矩阵。以矩阵的对角线为分隔,分为上三角和下三角。
如下面矩阵:
对称矩阵压缩存储时只需要存储i*(i+1)/2个数据。
对称矩阵与压缩矩阵的关系是:
对称矩阵SymmetricMatrix[i][j] =压缩矩阵Array(i*(i+1)/2+j)。
下面我实现一下对称矩阵存储在压缩矩阵以及将压缩矩阵中的元素还原成对称矩阵打印出来的代码。
代码如下:
#include<iostream> using namespace std; template<class T> class SymmtrixMatrix { public: SymmtrixMatrix(T* a, size_t size) :_a(new T[size*(size+1)/2]) , _size(size*(size + 1) / 2) { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (i >= j) { //将对称矩阵转换为压缩矩阵 _a[i*(i + 1) / 2+j] = a[i*size+j]; } } } } //压缩矩阵的访问打印 void Print(size_t size) { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { int row = i; int col = j; if (row < col) { swap(row, col); } cout << _a[row*(row + 1)/2 + col] << " "; } cout << endl; } cout << endl; } private: T* _a; size_t _size; //即n,对称矩阵为方阵 }; void Test() { 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 }, }; SymmtrixMatrix<int> sm((int*)a, 5); sm.Print(5); } int main() { Test(); system("pause"); return 0; }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。