数据结构|8|特殊矩阵

特殊矩阵

特殊矩阵的压缩存储

  • 压缩存储:指为多个值相同的元素只分配一个存储空间,对零元素不分配存储空间。其目的是节省存储空间。
  • 特殊矩阵:指具有许多相同矩阵元素或零元素,并且这些相同矩阵元素或零元素的分布有一定规律性的矩阵。常见的特殊矩阵有对称矩阵、上(下)三角矩阵、对角矩阵等。
  • 特殊矩阵的压缩存储方法:找出特殊矩阵中值相同的矩阵元素的分布规律,把那些呈现规律性分布的、值相同的多个矩阵元素压缩存储到一个存储空间中。

对称矩阵

若对一个n阶方阵A[1…n][1…n]中的任意一个元素aij,都有aji=aij(1≤i,j≤n),则称其为对称矩阵。对于一个n阶方阵,其中的元素可以划分为3个部分,即上三角区、主对角线和下三角区。
对于n阶对称矩阵,上三角区的所有元素和下三角区的对应元素相同,若仍采用二维数组存放,则会浪费几乎一半的空间,为此将对称矩阵A[1…n][1…n]存放在一维数组B[n(n+1)/2]中,即元素aij存放在bk中。只存放下三角部分(含主对角)的元素。

稀疏矩阵

矩阵中非零元素的个数t,相对矩阵元素的个数s来说非常少,即s>>t的矩阵称为稀疏矩阵。
例如,一个矩阵的阶为100×100,该矩阵中只有少于100个非零元素。
若采用常规的方法存储稀疏矩阵,则相当浪费存储空间,因此仅存储非零元素。但通常零元素的分布没有规律,所以仅存储非零元素的值是不够的,还要存储它所在的行和列。因此,将非零元素及其相应的行和列构成一个三元组(行标,列标,值),然后按照某种规律存储这些三元组。稀疏矩阵压缩存储后便失去了随机存取特性。

应用题

  • 将一个10×10对称矩阵M的上三角部分的元素mi,j(1≤i≤j≤10)按列优先存入C语言的一维数组N中,元素m7,2在N中的下标是(22)
    思路;
  • 对称矩阵首先转换一下,题目要求上三角部分m7,2我们可以看出来这个数其实是在下三角于是转换到上三角的位置就是m2,7,我们可以利用画图的方法,一可以利用空间想象力,把这个做出来。
  • 在C语言中,数组N的下标从0开始。第一个元素m1,1对应存入n0,矩阵M的第一列有1个元素,第二列有2个,第三列有3个,第四列有4个,第五行有5个,第六列有6个所以m7,2是第1+2+3+4+5+6+2=23个元素,下标应为22。

二维数组A按行优先方式存储,每个元素占用1个存储单元。若元素A[0][0]的存储地址是100,A[3][3]的存储地址是220,则元素A[5][5]的存储地址是(300)。
思路;

  • 二维数组A按行优先存储,每个元素占用1个存储单元,由A[0][0]和A[3][3]的存储地址可知A[3][3]是二维数组A中的第121个元素,假设二维数组A的每行有n个元素,则nx3+4=121,求得n=39,故元素A[5][5]的存储地址为100+39x5+6-1=300.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值