特殊矩阵的压缩存储

压缩存储


指为多个值相同的元素只分配一个存储空间,而对于零元素不分配空间,其目的就是节省存储空间;

特殊存储


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

特殊矩阵的压缩存储方法:找出特殊矩阵中值相等的元素的分布规律,把那些呈现规律性分布的,值相同的多个矩阵元素压缩存储到一个存储空间中:

下面介绍三种特殊矩阵

======================================================================

1.对称矩阵


在一个 n 阶方阵中,有 a i j a_{ij} aij​ = a j i a_{ji} aji​ (即各数据元素沿主对角线对称的矩阵),其中 1≤i,j≤n,则称该矩阵为对称矩阵,针对与这类矩阵,我们只需要存储上三角区或者下三角区就可以;

设有对称矩阵A[i][j]如下图示:

在这里插入图片描述

针对这种n阶对称方针n阶对称矩阵A,上三角区元素和下三角区元素的对应元素是相同的,若仍采用二维数组存放,则会浪费一半的存储空间。为此我们将该对称矩阵存放再一维数组B中,形式如下(只存放下三角部分元素):

在数组B中,位于元素 a i j a_{ij} aij​(i >= j)前面的元素个数为:

第 1 行:1个元素( a 1 , 1 a_{1,1} a1,1​);

第 2 行:2个元素( a 2 , 1 a_{2,1} a2,1​, a 2 , 2 a_{2,2} a2,2​);

第 i-1 行:i-1 个元素( a i − 1 , 1 a_{i-1,1} ai−1,1​, a i − 1 , 2 a_{i-1,2} ai−1,2​,…, a i − 1 , i − 1 a_{i-1,i-1} ai−1,i−1​) ;

第 i 行:j-1 个元素( a i , 1 a_{i,1} ai,1​, a i , 2 a_{i,2} ai,2​,…, a i , j − 1 a_{i,j-1} ai,j−1​);

由上面我们可以看出元素 a i j a_{ij} aij​在数组B中的下标 k = 1+2+…+ ((i-1 )+((j-1)=i(i-1)/2 + j-1;

因此元素下标之间的对应关系如下:

在这里插入图片描述

【注】数组下标从0开始;

2.三角矩阵


三角矩阵分为上三角矩阵和下三角矩阵,这个是根据是上三角区还是下三角区素有元素为同一常量来区分。

2.1下三角矩阵

下三角矩阵是指上三角区所有元素均为同一常量,设有下三角矩阵 A[i][j]如下图所示:

在这里插入图片描述

我们可以看出其存储思想和对称矩阵是类似的,不同的地方在于存储完不同的元素后,需要存储其他相同元素一次,故可以讲三角矩阵A[1…n][1…n]压缩存储在B[n(n+1)/2 + 1]中;

在下三角矩阵中,元素下标之间对应关系为:

在这里插入图片描述

下三角矩阵在内存中的压缩存储形式如下:

在这里插入图片描述

2.2上三角矩阵

上三角矩阵是指下三角区所有元素均为同一常量,设有下三角矩阵 A[i][j]如下图所示:

在这里插入图片描述

我们可以看出在存储上三角矩阵只需要存储上三角区,主对角线和下三角区的常量一次,可将其压缩存储在B[n(n+1)/2 + 1];

我们来分析一下:

在数组B中,位于元素 a i j a_{ij} aij​(i =< j )前面的元素个数为:

第 1 行:n 个元素;

第 2 行: n -1 个元素;

第 i-1 行:n - i +2 个元素;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

金三银四马上就到了,希望大家能好好学习一下这些技术点

学习视频:

大厂面试真题:

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
fana-1713755496095)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值