3.7 特殊矩阵的压缩存储

3.7 特殊矩阵的压缩存储

3.7.1 数组的定义

  1. 数组:数组是由n(n>=1)个相同类型的数据元素构成有限序列

    • 数组元素:数据元素
    • 下标:每个元素在n个线性关系中的序号
    • 数组维界:下标取值范围
  2. 数组与线性表的关系:数组是线性表的推广,一维数组可视为一个线性表,二维数组可视为其元素也是定长线性表的线性表,以此类推

  3. 数组一旦被定义,其维数和维界就不再改变,除结构的初始化和销毁外,数组只有存取元素和修改元素的操作

3.7.2 数组的存储结构

  1. 逻辑意义上的数组可采用计算机语言的数组数据类型进行存储,一个数组的所有元素在内存中占用一段连续的存储空间,每个元素大小相等
  2. 一维数组存储结构关系式: L o c ( a i ) = L o c ( a 0 ) + L ∗ i ( 0 < = i < n ) Loc(a_i)=Loc(a_0)+L*i(0<=i<n) Loc(ai)=Loc(a0)+Li(0<=i<n)(L为每个元素的大小)
  3. 二维数组存储结构关系式
    • 按行优先: L o c ( a i ) = L o c ( a 0 ) + ( i ∗ c o l s + j ) ∗ L ( 0 < = i < n ) Loc(a_i)=Loc(a_0)+(i*cols+j)*L(0<=i<n) Loc(ai)=Loc(a0)+(icols+j)L(0<=i<n)
    • 按列优先: L o c ( a i ) = L o c ( a 0 ) + ( j ∗ r o w s + i ) ∗ L ( 0 < = i < n ) Loc(a_i)=Loc(a_0)+(j*rows+i)*L(0<=i<n) Loc(ai)=Loc(a0)+(jrows+i)L(0<=i<n)

3.7.3 矩阵的压缩存储

  1. 压缩存储:指为多个值相同的元素只分配一个存储空间,对零元素不分配存储空间,其目的是节省存储空间

  2. 特殊矩阵:指具有许多相同矩阵元素或零元素,并且这些相同矩阵元素或零元素的分布具有一定规律性;如:对称矩阵,上(下)三角矩阵,对角矩阵

  3. 特殊矩阵的压缩存储方法:找出特殊矩阵中值相同的矩阵元素的分布规律,把呈现规律性分配的,值相同的矩阵元素压缩到存储到一个存储空间中

  4. 对称矩阵:对于一个n阶方阵A[1…n][1…n]中的任意一个元素 a i j a_{ij} aij,都有 a i j = a j i ( 1 < = i , j < = n ) a_{ij}=a_{ji}(1<=i, j<=n) aij=aji(1<=i,j<=n),则称其为对称矩阵;对称矩阵可分为三个区域:主对角线区域(i==j),上三角区域(i<j),下三角区域(i>j)

    • 只存储下三角区域的元素,元素与下标之间的对应关系为
      • i>=j: i(i-1)/2+(j-1)
      • i<j: j(j-1)/2+(i-1)
  5. 三角矩阵:上(下)三角区域存储非零矩阵元素,下(上)三角区域所有元素均为同一常量

    • 可将下三角矩阵存储在B[n(n+1)/2+1]矩阵中
      • i>=j: i(i-1)/2+j-1
      • i<j: n(n+1)/2
    • 可将上三角区域存储在B[n(n+1)/2+1]矩阵中
      • i<=j: (i-1)(2n-i+2)/2+(j-i)
      • i>j: n(n+1)/2
  6. 三对角矩阵:对n阶方阵中的任意元素,当|i-j|>1时值为0,即非零元素集中在以主对角线为中心的3条2对角线区域。

    • 元素 a i j a_{ij} aij在一维数组中的下标为k=3(i-1)-1+j-(i-2)-1=2i+j-3

    • 若已知元素存放在第k个位置,则可得 i = ⌊ ( k + 1 ) / 3 ⌋ + 1 i=\left \lfloor (k+1)/3 \right \rfloor +1 i=(k+1)/3+1

      3 ( i − 1 ) − 1 < = k < 3 i − 1 i < = ( k + 1 ) / 3 + 1 , j = k − 2 i + 3 3(i-1)-1<=k<3i-1 \\ i<=(k+1)/3+1, j=k-2i+3 3(i1)1<=k<3i1i<=(k+1)/3+1,j=k2i+3

  7. 稀疏矩阵:矩阵中非零元素的个数t相对于矩阵元素的个数s非常少,s>>t,如对于100*100矩阵,非零元素个数小于100

    • 稀疏矩阵中的非零元素的分布没有规律,因此一般用一个三元组来记录非零元素的行,列和值:(行,列,值)
    • 三元组可以采用数组存储(顺序存储三元组),也可以采用十字链表法存储
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值