数据结构——c语言描述 第五章 (1) 特殊矩阵的压缩存储

这一章之前的数组的基本概念我就不在这里赘述了,就是多维数组在计算机内部的存储是线性的,还有一些基本的数学规律。我先记录一下特殊矩阵压缩存储的知识吧,主要是分为三个部分,第一个是三角矩阵,第二个是带状矩阵,第三个是稀疏矩阵,前两个我会在这篇文章中叙述,后面一个我会在下一篇文章中叙述,因为涉及到的内容不少。

首先来看三角矩阵,三角矩阵的主要特点是:在一个nxn的矩阵当中,在对角线以下包括对角线存储着非零的数据,而在对角线以上的部分数据都为零。那么整个矩阵所需要存储的个数为(1+n)*n/2,所以我们只需要用一个(n+1)*n/2的数组存储这个矩阵。接下俩的任务就是矩阵中的下标对应的数组中的下表(这里假设所有的矩阵的开始下表是1,而不是0)那么在nxn的矩阵中Aij这个元素对应数组中的下标是(i-1)*i/2+j(在这里不考虑c语言的下标是从0开始),我个人觉得书上的求地址的推倒有点多此一举,只要建立原来矩阵中的非零元素和数组中的元素的映射关系就可以了。当然这里如果是对称矩阵也是可以用这种方法来压缩矩阵。

第二个部分是带状矩阵,这个矩阵不好用语言描述,之后会补上图,总之nxn矩阵中第一行和最后一行有两个元素非零,其他行中有三个元素,那么一共有3×n-2个元素非零。为了压缩存储空间,那么我们申请3×n-2个元素的数组。接下来我们需要做的是如何映射矩阵中的元素和数组中的元素,假设矩阵中的元素的下表为Aij,对应数组中的元素为3(n-1)-1+j(在这里不考虑c语言下标是从0开始的)&

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值