【数据结构】对称矩阵及对称矩阵的压缩存储-创新互联
对称矩阵:
环江网站建设公司创新互联公司,环江网站设计制作,有大型网站制作公司丰富经验。已为环江近千家提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的环江做网站的公司定做!设一个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)。
下面我实现一下对称矩阵存储在压缩矩阵以及将压缩矩阵中的元素还原成对称矩阵打印出来的代码。
代码如下:
#includeusing namespace std; template 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 sm((int*)a, 5); sm.Print(5); } int main() { Test(); system("pause"); return 0; }
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
当前文章:【数据结构】对称矩阵及对称矩阵的压缩存储-创新互联
本文网址:http://cdiso.cn/article/dsscse.html