矩阵为什么可以压缩存储呢?压缩原理是什么呢?(以C语言为例)

矩阵如何存储在数组中

在C语言中,矩阵a是存储在数组a[m][n]中的。
在这里插入图片描述
如上图中的矩阵,即可存储在a[4][4]={{12,0,0,0},{0,14,0,0},{0,0,12,0},{0,0,0,12}}二维数组中。

什么样的矩阵可以有必要压缩存储?

一般的矩阵,各个元素都是非零元素,故不需要压缩存储,哪怕压缩存储压缩率也不是很高。
有必要压缩存储的矩阵是:特殊矩阵和稀疏矩阵。
特殊矩阵(相同元素或零元素在矩阵中分布比较有规律的矩阵)。
稀疏矩阵(矩阵中绝大多数元素都为0的矩阵)

特殊矩阵有哪些?如何压缩存储?

对称矩阵

矩阵中行标和列表互换位置的两个元素值相等,即:aij=aji。
压缩原理:只需存矩阵中一半的元素即可。

上三角矩阵、下三角矩阵

矩阵下三角部分全为同一值c(c可为0)的矩阵是上三角矩阵。
矩阵上三角部分全为同一值c(c可为0)的矩阵是下三角矩阵。
压缩原理:与对称矩阵类似,只存储对角线、相同元素c、对角线以上或以下部分的元素即可。

对角矩阵

除了主对角线及其上下两条带状区域内的元素外,其余元素均为c(c可为0)的矩阵是对角矩阵。
压缩原理:存储c以外,主对角线及其上下两条带状区域内的元素。

稀疏矩阵如何压缩呢?

方法一:三元组数据结构表示

typedef struct{
int val;//用来存储非零元素的值
int i,j;//用来存储非零元素在矩阵中的下标
}Tritype;

方法二:伪地址表示法(二元数据结构表示)

伪地址法需要先按照元素在矩阵中按行优先或列优先的确定非零元素的序列数,即用一个顺序数表示非零元素的相对位置。

typedef struct{
int val;//用来存储非零元素的值
int i;//用来存储非零元素的相对位置
}Doubtype;

方法三:链式存储法(邻接表表示法和十字链表表示法)

**邻接表表示法:**将矩阵中的每一行非零元素使用链表表示。链表结点用两个元素分别表示:对应元素和元素的列号。

**十字链表表示法:**将稀疏矩阵中的,每一行用一个带头结点的链表表示,每一列也如此。链表结点用5个元素表示:行,列,值,向下结点的指针,向右结点的指针。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值