~对称矩阵的压缩存储~
来源:互联网 发布:2017java面试题 编辑:程序博客网 时间:2024/05/21 13:54
众所周知,对称矩阵的定义如下:设一个N*N的方阵A,A中任意元素Aij,当且仅当Aijj==Aji(0<=i<N,0<=j<N)时,该矩阵是对称矩阵。以对称矩阵的对角线为分割,分为上三角形和下三角形。
压缩存储对称矩阵时只需存储上三角形或下三角形的数据即可,故最多可存储n(n+1)/2个数据。
以下代码是以对称矩阵的下三角形存储:
template <class T>class SymmetricMatrix{public:SymmetricMatrix(T* matrix, size_t N):_N(N){_matrix = new T[N*(N+1)/2];size_t index = 0;for(size_t i=0; i<N; ++i){for(size_t j=0; j<N; ++j){if(i >= j){_matrix[index++] = matrix[i*N+j];}else{break;}}//for(size_t j=0; j<=i; ++j)//{//_matrix[index++] = matrix[i*N+j];//}}}~SymmetricMatrix(){delete[] _matrix;_matrix = NULL;_N = 0;}T& Access(size_t i, size_t j) //判断位置{if(i < j){swap(i, j);}return _matrix[i*(i+1)/2+j];}const T& Access(size_t i, size_t j) const //判断位置{if(i < j){swap(i, j);}return _matrix[i*(i+1)/2+j];}void Display() //打印矩阵{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* _matrix;size_t _N;};
测试用例如下:
void TestSymmetricMatrix(){int matric[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 *)matric, 5); sm.Display();}
0 0
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- ~对称矩阵的压缩存储~
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- 对称矩阵的压缩存储
- 对称矩阵、稀疏矩阵的压缩存储
- 对称矩阵压缩存储
- 对称矩阵压缩存储
- 对称矩阵 压缩存储
- 对称矩阵压缩存储
- 对称矩阵及对称矩阵的压缩存储
- 【数据结构】对称矩阵及对称矩阵的压缩存储
- 对称矩阵及对称矩阵的压缩存储
- pcDuino3B更新为ubuntu14.04系统并安装ros-indigo(armhf)过程说明
- [POI2017] Flappy Bird 解题报告
- SPRING INJECTION WITH @RESOURCE, @AUTOWIRED AND @INJECT
- 20分钟理解React Native For Android原理
- Leetcode OJ:Add Two Numbers
- ~对称矩阵的压缩存储~
- [编程题]好多鱼!
- 静态变量初始化:静态变量和静态代码块初始顺序
- 基于Docker Swarm官网文档总结其架构、特性与基本实践
- 前端工程构建需要的文件及步骤
- 非常棒的Chrome扩展,用于API & HTTP 请求调试:Postman
- 俄罗斯方块
- CentOS 7.2部署MariaDB Galera Cluster(10.1.21-MariaDB) 3主集群环境
- React Native使用AsyncStorage本地持久化