矩阵的存储

前言

字符串的操作先放一放,KMP算法有点不理解。
这一章名字应该是数组和广义表的,但是我感觉矩阵的存储是最陌生的,写这个吧。这篇文章关注的重点是矩阵如何存储,而不是矩阵的运算。

矩阵的压缩存储

矩阵的每一个元素叫矩阵元,通常高级语言是以二维数组的形式存储矩阵元的。但是实际的数值计算中经常出现一些阶数很高并且有很多重复元素或者零元素,这种情况就需要进行矩阵压缩存储了。

矩阵压缩的实质就是将矩阵从以二维数组存储变成以一维数组存储,对零元素不分配存储单元。

特殊矩阵

特殊矩阵讨论:对称矩阵、三角矩阵、对角矩阵。

对称矩阵

什么是对称矩阵,对于矩阵中的任何一个元素都有ai,j=aj,i,这样的矩阵就叫对称矩阵。也就是上三角等于下三角。

对于对称矩阵的存储方式是存储上三角或者下三角加对角线,假设一个n阶对称方针,如果全部存储使用的存储空间是n2,压缩存储则是n(n+1)/2,为什么?对角线元素为n个,除了对角线之外其他元素n2-n,需要存储的元素(n2-n)/2,加上对角线全部存储,结果就是n(n+1)/2。假设存储一个n阶对称矩阵,使用sa[n(n+1)/2]来存储,那么sa[k]与ai,j的关系是:

当i>=j时,k = i(i-1)/2+j-1
当i<j时,k = j(j-1)/2+i-1

三角矩阵

三角矩阵是上三角或者下三角全部为相同元素的矩阵。可用类似于对称矩阵的方式存储,再加上一个位置用来存储上三角或者下三角元素就好了。

对角矩阵

非零值元素都分布在以主对角线为中心的几条对角线上,对于这种矩阵可以按照以行(列)为主,存储在一维数组里面。

稀疏矩阵

以上所谈,全部为特殊矩阵,也就是零很多的矩阵,但是实际中还有很多矩阵的非零元素较少,并且分布没有规律,这就是稀疏矩阵了。

系数矩阵的定义

至今仍未能给出确切定义,它只是一个人们凭直觉来了解的理念。假设在矩阵m * n中,有t个元素不为零。令t/(m*n)<=0.05时称为稀疏矩阵。这个0.05称为稀疏因子。
注意:这个0.05本来有一个字符表示的,但是我电脑输入法时win10自带的,那个字符不知道怎么输入,就没写了【逃
---------严蔚敏《数据结构》

总而言之,稀疏矩阵的零值很少。下面看稀疏矩阵如何存储:

三元组顺序法

也就是顺序的三元组存储,三元组里面存的是该矩阵元的值与行列号,这种方式只需存储非零元。可以采用按照行序或者列序存储。这种存储方式进行转置运算有两种方式。

假设要求矩阵a的转置矩阵,设为b。矩阵存储在data三元组里面,data是顺序的。a的非零元三元组数组就是a.data,b就是b.data。

第一种方式,按照b.data的顺序在a.data中查找对应的。这种方式就是从b.data的第一个元素开始找对应的元素在a.data的哪个位置。时间复杂度为O(nu *tu)。ps:tu是非零元个数,mu行数,mu列数

第二种方式,按照a.data的顺序往b.data中插入。这种方式时间复杂度为O(nu+tu),但是当tu与mu * nu等数量级的时候,时间复杂度为O(mu * nu)。

行逻辑链接的顺序表

这种方式提出的原因是为了随机访问任意一行的非零元,这种方式需要一个数组指向每一行开始元素的位置。这种方式适合矩阵相乘。

十字链表

当矩阵中元素非零元个数和位置在操作过程中变化较大时,就不宜采用顺序存储结构来表示三元组的线性表。比如在进行加减操作时,会出现非零元变成零元的情况,因此,就适合用这种结构来存储。

十字链表的结构有五个域,一个数据域存放矩阵元,i、j 域分别存放该非零元所在的行、列。还有right、down域,right指向右边第一个矩阵元的位置,down用来指向下面第一个矩阵元的位置。

然后建立两个数组,分别指向每行/列的第一个元素。

十字链表在图中也有应用,用来存储图。

总结

简单总结一下,这篇文章主要讲如何存储矩阵,首先从高级语言谈起,根据实际矩阵特征可知可以压缩存储,压缩的实质就是只存非零元、二维变一维。

然后谈到了特殊矩阵(对称矩阵、三角矩阵、对角矩阵)如何存储,使用的空间是多少,以及数组元素与矩阵元的一一对应关系。

接着就是稀疏矩阵,从定义开始,谈到了三种存放稀疏矩阵的方法,每个方法为何会被提出,适用于什么矩阵运算等等。

参考资料

严蔚敏《数据结构》
王道数据结构单科书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值