数据结构-特殊矩阵的压缩存储

特殊矩阵的压缩存储

  数组的存储结构

  一个数组中的所有元素在内存中占用一段连续的存储空间。

  对于多维数组,有两种映射方法:按行优先,按列优先。以二维数组为例:按行优先存储的基本思想是:先行后列,先存储行号较小的元素,行号相等先存储列号较小的元素。

  矩阵的压缩存储

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

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

  1、对称矩阵

  

  上三角区的所有元素和下三角区的对应元素相同,若仍采用二维数组存储,则会浪费几乎一半的存储空间,所以我们存放在一个一维数组B[n(n+1)/2]中,即元素a(i,j) 存放在b(k)中。

  元素a(i,j)在数组b中的下标k = 1 + 2 + … + (i - 1) + ( j - 1) = i (i-1) / 2 + j - 1 (数组下标从0 开始)。

  因此,元素下标之间的对应关系为:
k = { i ( i − 1 ) / 2 + j − 1 i > = j ( 下 三 角 区 和 主 对 角 线 元 素 ) j ( j − 1 ) / 2 + i − 1 i < j ( 上 三 角 区 元 素 a   i , j   = a   j , i   ) k=\left\{\begin{aligned}i(i-1)/2 + j - 1 && i >= j(下三角区和主对角线元素) \\j(j-1)/2 + i - 1 && i < j (上三角区元素a~i,j~ = a~j,i~)\end{aligned}\right. k={i(i1)/2+j1j(j1)/2+i1i>=j(线)i<j(a i,j =a j,i )

  2、三角矩阵

  上三角矩阵中,下三角区的所有元素均为同一常量,一般为0。只需存储主对角线、上三角区上的元素和下三角区的常量一次,可将其压缩存储B[n(n+1)/2 + 1]中。

  因此,元素下标之间的对应关系为:
k = { ( i − 1 ) ( 2 n − i + 2 ) / 2 + j − 1 i < = j ( 上 三 角 区 和 主 对 角 线 元 素 ) n ( n + 1 ) / 2 i < j ( 下 三 角 区 元 素 ) k=\left\{\begin{aligned}(i-1)(2n-i+2)/2 + j - 1 && i <= j(上三角区和主对角线元素) \\n(n+1)/2 && i < j (下三角区元素)\end{aligned}\right. k={(i1)(2ni+2)/2+j1n(n+1)/2i<=j(线)i<j()

  下三角矩阵:

  下三角矩阵的存储思想与对称矩阵类似,不同之处在于存储完下三角区和主对角线上元素之后,紧接着存储对角线上方的常量一次。

  因此,元素下标之间的对应关系为:
k = { i ( i − 1 ) / 2 + j − 1 i > = j ( 下 三 角 区 和 主 对 角 线 元 素 ) n ( n + 1 ) / 2 i < j ( 上 三 角 元 素 ) k=\left\{\begin{aligned}i(i-1)/2 + j - 1 && i >= j(下三角区和主对角线元素) \\n(n+1)/2 && i < j (上三角元素)\end{aligned}\right. k={i(i1)/2+j1n(n+1)/2i>=j(线)i<j()

  3、三对角矩阵

  对角矩阵也称带状矩阵。对于n阶方阵A中的任意元素aij,当|i-j| > 1 时,有aij = 0,则称为三对角矩阵。

    

  采用压缩存储,将3条对角线上的元素按行优先存放在一维数组B中,且将a0,0 存放在B[0]中,这样就可以计算出三角线上元素 aij( 0<= i, j <= n, | i - j| <= 1 ) 在一维数组B中存放的下标为 k = 2i + j - 3。

  稀疏矩阵

  如果矩阵中的非零元素的个数相对整个矩阵的元素个数来说非常少,则将这样的矩阵称为稀疏矩阵。

  存储稀疏矩阵,我们一般构造三元组存储矩阵非零元素。系数矩阵压缩存储后便失去了随机存取的特性。


如果觉得本文对你有帮助的话,不妨关注作者一波,小小的关注其实对我很重要。更多高质量内容与资料请访问:数据结构简单学,个人主页:修心的小屋
如果喜欢的话,不妨关注一波,谢谢啦。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值