特殊矩阵的压缩存储

Posted zws-bugging

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特殊矩阵的压缩存储相关的知识,希望对你有一定的参考价值。

所谓特殊矩阵:是指矩阵中值相同的元素或者零元素的分布有一定的规律。常见的特殊矩阵有:对称矩阵、三角矩阵、对角矩阵。注意:它们都是方阵,即行数和列数相同。

主对角线:在矩阵中每个元素的行标等于纵标(i==j)。

上三角:在矩阵中每个元素的行标小于纵标(i<j)。

下三角:在矩阵中每个元素的行标大于纵标(i>j)。

一、对称矩阵的压缩存储

一个n阶方阵A[n][n]中的元素满足ai,j=aj,i(0<=i,j<=n-1),则称其为n阶对称矩阵。

压缩存储:由于元素关于主对角线对称,在存储时只存储对称矩阵的上三角或下三角元素,使得对称的元素共享一个存储空间。(以行序为主序存储其下三角+主对角线的元素,一共要存储n*(n+1)/2个元素)

 技术图片

 由于k的序号=所有它前面元素的个数=所在行前面行的所有元素+所在行它前面的元素(包括本身)。

一维数组k与与二维数组元素的i、j之间的关系:

当i>=j时,k=i*(i+1)/2 + j;//本例都是以0为开始的下标,以下也是类同。

当i<j时,k=j*(j+1)/2+i;

二、三角矩阵的压缩矩阵

上三角矩阵:当一个方阵的主角线以下的所有元素皆为零;

当i<=j时,k=(i-1)*(2n-i+2)/2+j-2;(以下公式为了方便理解,i,j,k都是从1开始)

矩阵元素压缩放在一维数组上,可以理解为:

如5*5矩阵上三角矩阵第一行为5个元素,第二行为4个元素...最后一行为1个元素(也就是元素个数逐减的等差数列an=n-i+1,an代表每行的个数,i代表的是第几项(第几行),所以a1=n-1+1=n,当前行的前面所有行的元素和:s(i-1)=n(a1+an)/2=(i-1)*[n+(n-(i-1)+1)]=(i-1)*(2n-i+2)/2)

如:a[3][3]=b[10],s2=5+4=9,所以k=s2+j-2=10。

技术图片

 

下三角矩阵:当一个方阵的主角线以上的所有元素皆为零;

当i>=j时,k=i*(i+1)/2+j-2;

以上是关于特殊矩阵的压缩存储的主要内容,如果未能解决你的问题,请参考以下文章

数据结构-特殊矩阵的压缩存储

特殊矩阵的压缩存储

Java数据结构之对称矩阵的压缩算法---

特殊矩阵的压缩存储(转自chunlanse2014)

稀疏矩阵的压缩存储思想?

特殊矩阵的压缩存储(C语言)