【数据结构】压缩特殊矩阵

本文介绍了几种特殊矩阵的压缩存储方法,包括对称矩阵、三角矩阵及三对角矩阵。通过对这些矩阵进行压缩存储,可以有效减少存储空间的浪费。

矩阵是一种常用的数学对象,一般情况下,小的矩阵我们可以直接用二维数组直观方便地储存,但是在科学与工程计算问题中常会遇到较高阶数的矩阵,并且矩阵中会出现大量零元素,或者矩阵中的元素呈某种规律分布。如果在这种情况下仍然采用二维数组描述矩阵,看起来储存密度为1,实际上却占用了许多单元去储存零元素或重复的非零元素,从而会造成极大的浪费。为了节省储存空间,我们可以对这类矩阵进行储存压缩。

所谓的储存压缩是指:为矩阵中多个相同的元素只分配一个存储空间,对零元素不分配空间。特殊矩阵和稀疏矩阵是两类适合进行压缩存储的矩阵。本文先讲特殊矩阵,所谓的特殊矩阵是指非零元素分配有一定规律的矩阵,常见的特殊矩阵有对称矩阵、三角矩阵、三对角矩阵等。

对称矩阵:

在n阶方阵中,有a[i][j] == a[j][i]性质的,称为对称矩阵。
对称矩阵的元素关于主对角线对称,故只要存储矩阵中上三角部分或者下三角部分就可以。这相当于让每两个对称的元素共享存储空间,能节约近一半的空间。
这里存储下三角。
在对称矩阵的下三角部分中,第i行恰有i + 1个元素,总数为[n * (n + 1)] / 2.
因此,我们可以按照如下图所示的顺序将其存入到一个一维数组s中实现压缩存储。

对称矩阵下三角部分存储示意图

一维数组s的大小应该是[n * (n + 1)] / 2,其下标k的范围为0 ~ [n * (n + 1)] / 2 - 1;

这里写图片描述
图:对称矩阵压缩存储

为了访问对称矩阵A中的元素,我们必须在两者之间找到相应的对称关系:

若i >= j,则a[i][j]在下三角部分中,a[i][j]之前的i行一共有1+2+3+…+i = [i * (i + 1)] / 2个元素,在第i行上,a[i][j]之前恰有j个元素

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值