点击这里给我发消息 点击这里给我发消息

C++数组应用之特殊矩阵的压缩存储

添加时间:2013-12-7
    相关阅读: 设计 程序 C++

    矩阵:

    矩阵是数值程序设计中经常用到的数学模型,它是由 m 行和 n 列的数值构成(m=n 时称为方阵)。在用高级语言编制的程序中,通常用二维数组表示矩阵,它使矩阵中的每个元素都可在二维数组中找到相对应的存储位置。然而在数值分析的计算中经常出现一些有下列特性的高阶矩阵,即矩阵中有很多值相同的元或零值元,为了节省存储空间,需要对它们进行"压缩存储",即不存或少存这些值相同的元或零值元。

    操作:可以对矩阵作加、减、乘等运算。

    存储压缩目标:

    节约存储空间

    压缩的方法:

    零元不存储

    多个值相同的只存一个

    压缩存储的对象:

    稀疏矩阵

    特殊矩阵

    特殊矩阵:

    值相同元素或者零元素分布有一定规律的矩阵称为特殊矩阵 例:对称矩阵、 上(下)三角矩阵都是特殊矩阵

    特殊矩阵压缩存储(以对称矩阵为例)

    对称矩阵是满足下面条件的n 阶矩阵: aij= aji  1<= i,j<= n

    k= 0   1    2     3   4     5    6                      n(n+1)/2-1

    对称矩阵元素可以只存储下三角部分,共需 n(n+1)/2 个单元的空间( 三角矩阵的存储方式类似)

    以一维数组sa[0……n(n+1)/2-1]作为n 阶对称矩阵A的存储结构A中任意一元素 aij与它的存储位置 sa[k] 之间关系:

 

    k= 0   1    2     3   4     5    6                      n(n+1)/2-1

    例如:a42 在 sa[ ]中的存储位置是:

    k=4*(4+1)/2+2=12

    sa[12]= a42

    带状矩阵所有非0元素都集中在以主对角线为中心的带状区域,半带宽为d时, 非0元素有(2d+1)*n-(1+d)*d个(左上角与右下角补上0后,最后必须减掉),如下图怕示:

    为计算方便,认为每一行都有2d+1个非0元素,若少则0补足存放矩阵的数组sa[ ]有:n(2d+1)个元素数组,元素sa[k]与矩阵元素aij 之间有关系:

    k=i*(2d+1)+d+(j-i)(第一项i*(2d+1)表示前i行一共有几个元素,d+(j-i)这一项是用来确定第i行中,第j列前有几个元素,以i=j时,这时j-i=0,这个作为“分水岭”,左右两边的元素分别加上偏移量d.)

    本例:d=1

    K= 0    1         2        3      4    5     6           7    8      9      10   11    12    13      14

    A的三元组顺序表图示

 

    三元组 (Trituple) 类的定义

 template<class Type> class SparseMatrix<Type>;
template<class Type>
 class Trituple ...{
 friend class SparseMatrix <Type>
 private:
      int row, col;       //非零元素所在行号/列号
      Type value;       //非零元素的值
 }

    在此程序中有4个并列循环,其时间复杂度分别为O(Cols),O(Terms),O(Cols),和O(Terms),则程序总的时间复杂度为O(Cols+Terms)。当Terms与Rows*Cols等数量级时,程序的时间复杂度为O(Cols+Terms)=O(Rows*Cols)。设Rows=500,Cols=100,Terms=10000,则O(500*100)=O(50000)。当Terms远远小于Rows*Cols时,此程序会更省时间,但程序中需要增加两个体积为Cols的辅助数组。一般Terms总是大于Cols的,如果能够大幅度提高速度,这点空间存储上的开销是值得的。

相关C++数组应用之特殊矩阵的压缩存储

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册