矩阵的压缩存储

这篇具有很好参考价值的文章主要介绍了矩阵的压缩存储。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要内容:本文主要介绍几种特殊矩阵的压缩存储特殊矩阵指具有许多相同矩阵元素或零元素,并且这些相同矩阵元素的分布有一定规律性的矩阵,常见的特殊矩阵有对称矩阵、上(下)三角矩阵、对角矩阵等。压缩存储指为多个值相同的元素只分配一个存储空间,对零元素不分配存储空间,其目的是节省存储空间。

特殊矩阵的压缩存储方法:找出特殊矩阵中值相同的矩阵元素的分布规律,把那些呈现规律性分布的、值相同的多个矩阵元素压缩到一个存储空间中。具体方法:实现一个映射函数,将矩阵下标与一维数组下标相映射。

1.对称矩阵

(1)对称矩阵定义

若对一个n阶方阵A[1…n][1…n]中的任意一个元素aij都有aij=aji(1≤i,j≤n),则称其为对称矩阵。其中的元素可以划分为3个部分,即上三角区、主对角线和下三角区。
矩阵压缩存储,数据结构,矩阵,linux,算法

(2)对称矩阵的压缩存储

对于n阶压缩矩阵,上三角区的所有元素和下三角区的对应元素相同,若仍采用二维数组存放,会浪费几乎一半的空间,为此将对称矩阵A[1…n][1…n]存放在一维数组B[n(n+1)/2]中,即将元素aij存放在bk中。只存放下三角部分(含主对角线)的元素。

由于对称矩阵一定是方阵,不妨设i=j=n,则**下三角区的元素加上主对角线上的元素总和(需要存储的数据数量)**为:
S = n ( n + 1 ) / 2 S=n(n+1)/2 S=n(n+1)/2
第i行第j个元素的序列号为:
a i j = [ 1 + 2 + . . . + ( i − 1 ) ] + j = i ( i − 1 ) / 2 + j . aij = [1+2+...+(i-1)]+j=i(i-1)/2+j. aij=[1+2+...+(i1)]+j=i(i1)/2+j.
存储在矩阵中的元素下标k为:
k = i ( i − 1 ) / 2 + j − 1 k=i(i-1)/2+j-1 k=i(i1)/2+j1

(3)对称矩阵中元素与数组元素下标的对应关系

数组从0开始,所以对称矩阵中元素的序号与数组元素下标相差1
矩阵压缩存储,数据结构,矩阵,linux,算法

2.三角矩阵

(1)三角矩阵定义

在下三角矩阵中,上三角区的所有元素均为同一常量。其存储思想与对称矩阵类似,不同的是,只需要存储上三角区的常量一次。可以将下三角矩阵A[1…n][1…n]压缩存储在B[n(n+1)/2+1]中。三角矩阵形式如下图所示。
下三角矩阵:
矩阵压缩存储,数据结构,矩阵,linux,算法
上三角矩阵
矩阵压缩存储,数据结构,矩阵,linux,算法

(2)三角矩阵的压缩存储

下三角矩阵的压缩存储与对称矩阵相同,唯一不同的是多出来一个元素B[n(n+1)/2]存储上三角区的常数C。上三角矩阵类似。

(3)三角矩阵中元素与数组元素下标的对应关系

下三角矩阵:
矩阵压缩存储,数据结构,矩阵,linux,算法
上三角矩阵:
元素aij的序号为
a i j = [ n + ( n − 1 ) + . . . + ( n − i + 2 ) − ( j − i + 1 ) ] = ( i − 1 ) ( 2 n − i + 2 ) / 2 + ( j − i ) . aij = [n+(n-1)+...+(n-i+2)-(j-i+1)]=(i-1)(2n-i+2)/2+(j-i). aij=[n+(n1)+...+(ni+2)(ji+1)]=(i1)(2ni+2)/2+(ji).
存储在矩阵中的元素下标k为:
k = ( i − 1 ) ( 2 n − i + 2 ) / 2 + ( j − i ) − 1 k=(i-1)(2n-i+2)/2+(j-i)-1 k=(i1)(2ni+2)/2+(ji)1
矩阵压缩存储,数据结构,矩阵,linux,算法
上三角矩阵在内存中的压缩存储形式:
矩阵压缩存储,数据结构,矩阵,linux,算法

3.三对角矩阵/带状矩阵

(1)三对角矩阵定义

对角矩阵也称带状矩阵。对于n阶方阵A中的任意元素aij,当|i-j|>1时,有aij=0(1≤i,j≤n),称为三对角矩阵。在三对角矩阵中,所有非零元素都集中在以主对角线为中心的3条对角线的区域,其他区域元素都为0.
矩阵压缩存储,数据结构,矩阵,linux,算法

(2)三对角矩阵的压缩存储、元素与数组元素下标的对应关系

将3条对角线上的元素按行优先方式存放在一维数组B中,元素aij在数组中存放的下标是:
k = 2 i + j − 3 k=2i+j-3 k=2i+j3

4.稀疏矩阵

矩阵中非零元素的个数相对于矩阵元素的总个数来说非常少,即矩阵元素个数>>非零元素个数,这种矩阵称为非零矩阵。
对于非零矩阵,仅存储非零元素即可,但零元素的分布往往没有规律,所以仅存储非零元素的值是不够的,还要一起存储它所在的行和列。可以存储三元组(行标,列标,值)。稀疏矩阵压缩存储后就失去了随机存取特性。
矩阵压缩存储,数据结构,矩阵,linux,算法
本文为个人学习总结所得,如有问题欢迎评论区指正、讨论。文章来源地址https://www.toymoban.com/news/detail-733822.html

到了这里,关于矩阵的压缩存储的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包