对称矩阵,对角矩阵,三角矩阵,稀疏矩阵的压缩与解压缩
设计几个分别针对这些矩阵的类
每种类中都具有压缩和解压缩的方法
下面是对这些矩阵如何进行处理的简要说明:
对称矩阵:
压缩:我们打算存储对称矩阵的下三角部分,将其存储在一维数组中。通过计算我们可以知道a[ij]在一维数组中的位置——n=[1+2+...+(i-2)]+(j+1)-1=(i-1)(i-2)/2+j
解压缩:假设压缩后的数据存储在数组x中,建立一个二维数组y(即矩阵),将数组x中的数据按顺序存储在二维数组y的下三角区,然后再通过a(ji)=a(ij)来补充二维数组y(即矩阵)
对角矩阵:
压缩:将对角矩阵的每条对角线分别存储在二维数组的每一行。
解压缩:将二维数组的每一行元素重新放回对角线中
三角矩阵:
注意,此时创建的用来存储压缩后数据的一维数组当中存储的不仅有矩阵当中的数据,还有一个元素(放在一维数组最后)是用来标记这个对角矩阵是下三角矩阵(标记为1)还是上三角矩阵(标记为2)
下面以下三角矩阵为例(若为上三角矩阵则将其旋转180度转化为下三角矩阵之后再处理):
压缩:待压缩矩阵为二维数组a,用以为数组x用来存储压缩后的矩阵,矩阵中的常数c存储在x[0],a[ij]存储在x[n]中——n=[1+2+...+(i-2)]+(j+1)-1+1=(i-1)(i-2)/2+j+1,一维数组x的最后一个元素存储为1(若为下三角矩阵则存储为2)。
解压缩:建立一个二维数组y(即矩阵),将数组x中的数据按顺序存储在二维数组y的下三角区,然后用常数c填充剩余部分。
稀疏矩阵:
压缩:1.三元组法 2.十字链表法 3.行逻辑链接的顺序表
解压缩:根据存储的元素(含有矩阵元素的值及其在矩阵中的位置坐标),可以很轻松的复原矩阵。