1、对称矩阵的压缩存储
设矩阵的阶数为n,由于n阶对称矩阵中的数据元素基于其主对角线或副对角线对称,故而在存储时可将对称的两个相同数值的矩阵数据元素存储在同一个存储单元中。这样可以将个元素压缩在
即
个存储单元中。其元素下标与元素以及隐含元素在一维数组中的对应关系如下:
2、下标计算
假设以一维数组存储压缩后的矩阵,则要求一维数组有个存储单元。有如下图堆成矩阵v,设
为对称矩阵中的第i行第j列元素,k为一维数组中元素索引下标,此处以行序为主序存储下三角矩阵元素为例进行分析,何为行序大家可自行查询,此处不做分析,观察下列矩阵,
在一维数组中的下标应当为0,
下标为1,
下标为3,以此类推,假设要求
元素下标,其下标即为一维数组中在它前面的元素个数。
仔细观察该矩阵可发现该矩阵的下三角可发现,每一行元素个数都是有规律的递增,且增量为1,这与等差数列的性质不谋而合,假设现要求的下标,无论
在它所在行的什么位置,除去它之后它所在行都不是完整的行,因而计算其下标时应当使用等差数列前n项和公式计算它所在行的前面所有行元素个数之和再加上它所在行在它前面的元素个数之和,即为
的下标,由此可总结出如下规律:
其中由等差数列
所得,大家可自己推算一番;
是由于
元素所在行除去其本身之外并不完成,不能代入等差数列进行计算,因而单独求其所在行在其前面的元素个数,即为
所在列数减1。
此处由于是以行序为主序存储矩阵下三角的方式对矩阵进行压缩,即i >= j时的情况,i < j的情况大家可自行推算,大体相同。
此篇文章为学习过程中的心得斩获,如若错误之处,还望各位斧正!