数据结构::矩阵(一)--对称矩阵及对称矩阵的压缩存储
来源:互联网 发布:股票持仓软件 编辑:程序博客网 时间:2024/06/03 16:07
【对称矩阵】:
1、定义:元素以对角线为对称轴对应相等的矩阵。
设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 <= i <= N-1
&& 0 <= j <= N-1),则矩阵A是对称矩阵。以矩阵的对角线为分隔,分为上三
角和下三角。
【对称矩阵的压缩存储】:
1、压缩存储称矩阵存储时只需要存储上三角/下三角的数据,所以最多存
储n(n+1)/2个数据。
2、对称矩阵和压缩存储的对应关系:下三角存储i>=j, SymmetricMatrix[i][j] ==
Array[i*(i+1)/2+j]
**下面给出对称矩阵的实现代码**:
#include<iostream>using namespace std;template<typename T>class SymmetricMatrix{public://构造函数SymmetricMatrix(){}SymmetricMatrix(T* a, size_t n):_a(new T[n*(n+1)/2]),_n(n){size_t index = 0;for(size_t i= 0; i<_n; i++){for(size_t j = 0; j<_n; j++){if(i >= j){_a[index] = a[i*n+j];index++;}else{break;}}}}//析构函数~SymmetricMatrix(){if(_a){delete[]_a;}}//判断数组是否是访问下三角的T& Access(size_t i,size_t j){if(i <= j){std::swap(i,j);}return _a[i*(i+1)/2+j];}//打印对称矩阵void Print(){for(size_t i = 0; i<_n; i++){for(size_t j = 0; j<_n; j++){cout<<Access(i,j)<<" ";}cout<<endl;}cout<<endl;}protected:T* _a; //用二维数组存储,用一维数组进行读取 size_t _n; //因为是n*n的,直接给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},};SymmetricMatrix<int> sm((int*)a,5);sm.Print();}int main(){Test();return 0;}
1 0
- 数据结构::矩阵(一)--对称矩阵及对称矩阵的压缩存储
- 【数据结构】对称矩阵及对称矩阵的压缩存储
- 对称矩阵及对称矩阵的压缩存储
- 对称矩阵及对称矩阵的压缩存储
- 对称矩阵及对称矩阵的压缩存储
- 对称矩阵及对称矩阵的压缩存储
- 【矩阵】对称矩阵及稀疏矩阵的压缩存储
- 【数据结构】对称矩阵和稀疏矩阵的压缩存储
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- ~对称矩阵的压缩存储~
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- uva 165 Stamps
- dsfsadf
- CODE(VS) 1044 导弹拦截 (判断最长递增和最长递减子序列)
- 15-面试题
- bzoj4723
- 数据结构::矩阵(一)--对称矩阵及对称矩阵的压缩存储
- Android基础----Spanner(下拉列表)
- spring依赖注入
- iOS开发ARC内存管理技术要点
- 字符串反转,单词反转
- 在浏览器地址栏按回车、F5、Ctrl+F5刷新网页的区别
- QSlider和QLCDNumber 滑块 LCD
- JS实现网页全屏与退出全屏
- CSS content换行技术实现字符animation loading效果