对称矩阵的压缩存储-数组下标计算

文章介绍了对称矩阵的压缩存储原理,通过只存储下三角矩阵的一半数据来节省空间。以行序为主序,利用等差数列公式计算元素在一维数组中的下标,详细阐述了下标计算方法,并指出对于i>j的情况与i<j的情况的处理类似。
摘要由CSDN通过智能技术生成

 1、对称矩阵的压缩存储

        设矩阵的阶数为n,由于n阶对称矩阵中的数据元素基于其主对角线或副对角线对称,故而在存储时可将对称的两个相同数值的矩阵数据元素存储在同一个存储单元中。这样可以将n^{2}个元素压缩在\frac{(n-1)^{2}}{2} + n 即 \frac{n(n+1))}{2}个存储单元中。其元素下标与元素以及隐含元素在一维数组中的对应关系如下:

 2、下标计算

        假设以一维数组存储压缩后的矩阵,则要求一维数组有\frac{n(n+1))}{2}个存储单元。有如下图堆成矩阵v,设a_{ij}^{}为对称矩阵中的第i行第j列元素,k为一维数组中元素索引下标,此处以行序为主序存储下三角矩阵元素为例进行分析,何为行序大家可自行查询,此处不做分析,观察下列矩阵,a_{11}^{}在一维数组中的下标应当为0,a_{12}^{}下标为1,a_{22}^{}下标为3,以此类推,假设要求a_{33}^{}元素下标,其下标即为一维数组中在它前面的元素个数。

 

       仔细观察该矩阵可发现该矩阵的下三角可发现,每一行元素个数都是有规律的递增,且增量为1,这与等差数列的性质不谋而合,假设现要求a_{ij}^{}的下标,无论a_{ij}^{}在它所在行的什么位置,除去它之后它所在行都不是完整的行,因而计算其下标时应当使用等差数列前n项和公式计算它所在行的前面所有行元素个数之和再加上它所在行在它前面的元素个数之和,即为a_{ij}^{}的下标,由此可总结出如下规律:

        k = \frac{i (i - 1))}{2} + j - 1

        其中\frac{i(i - 1)}{2}由等差数列Sn = na_{1}^{} + \frac{n(n-1)d}{2} = \frac{n(a_{1}^{} + a_{n}^{})}{2}, a_{1}^{} = 1, a_{n}^{} = i - 1所得,大家可自己推算一番;j - 1是由于a_{ij}^{}元素所在行除去其本身之外并不完成,不能代入等差数列进行计算,因而单独求其所在行在其前面的元素个数,即为a_{ij}^{}所在列数减1。

        此处由于是以行序为主序存储矩阵下三角的方式对矩阵进行压缩,即i >= j时的情况,i < j的情况大家可自行推算,大体相同。

        此篇文章为学习过程中的心得斩获,如若错误之处,还望各位斧正!

 

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值