数据结构学习笔记——矩阵的压缩存储

矩阵的压缩存储

数组的存储结构

一维数组的存储结构

各个数组元素大小相同,且物理上连续存放
LOC:数组的起始地址
数组元素a[i]的存放地址 = LOC + i * sizeof(Elem Type)

二维数组的存储结构

行优先存储

b[i][j]的存储地址=LOC + (i*N + j) * sizeof(ElemType)

列优先存储

b[i][j]的存储地址 = LOC + (j*M+i) * sizeof(ElemType)

矩阵

普通矩阵的存储

可以用二维数组存储

特殊矩阵

对称矩阵

若n阶方程中任意一个元素a都有aij=aji则称该矩阵为对称矩阵
普通存储:二维数组
压缩存储:使用一维数组只存储主对角线+下三角区(或者主对角线+上三角区)

  • 只存储主对角线+下三角区(i>=j):

按行优先原则将各个元素存入一维数组中

  1. 需要存储(1+n)*n/2个元素

  2. 可以实现一个“映射”函数:矩阵下标->一维数组下标

  3. aij是第 i(i-1)/2+j个元素,即数组下标k=i(i-1)/2+j-1

  4. 只存储主对角线+上三角区(i<j):

  5. aji是第 j(j-1)/2+i个元素,即数组下标k= j(j-1)/2+i-1

三角矩阵

除了上三角或者下三角区和对角线区,其余元素都相同为c
压缩存储策略:按行优先原则将橙色区元素存入一维数组中,并在最后一个位置存储常量c

下三角矩阵:

按行优先原则将各个元素存入一维数组中

  1. 需要存储(1+n)*n/2个元素(多出一个用于存储常量c)
  2. 下三角区和对角线元素数组下标 k=i(i-1)/2+(j-1) (i>=j);上三角区元素 k=n(n+1)/2

上三角矩阵:

按行优先原则将各个元素存入一维数组中 k=(i-1)(2n-i+2)/2+(j-i) (i<=j);k=n(n+1)/2 (i>j)

三对角矩阵

三对角矩阵,又称带状矩阵:当[i-j]>1时,有aij = 0 (1<=i,j<=n)

矩阵下标->一维数组下标

  • 前i-1行共3(i-1)-1个元素
  • aij是i行第j-i+2个元素
  • aij是第2i+j-2个元素
  • k=2i+j-3

数组下标k->矩阵下标

  • 前i-1行共3(i-1)-1个元素
  • 前i行共3i-1个元素
  • 显然 3(i-1)-1<k+1<=3i-1
  • i=[(k+2)/3] ([]为向上取整);
  • 由 k=2i+j+3得出 j=k-2i+3
稀疏矩阵

非零元素远远小于矩阵元素的个数

压缩矩阵策略:
一 、顺序存储——三元组<行,列,值>
二、 链式存储——十字链表法

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值