4.1.特殊矩阵的压缩存储

对称矩阵的压缩存储 对称矩阵,相信大家都有所了解,即元素为以主对角线为对称轴对应相等的矩阵。故而会有许多相等的元素。 这种矩阵如果很大,存储时必然会浪费很多空间,本文讲解对称矩阵的压缩存储。 以如下4*4对称矩阵为例: 本文考虑只存储对称矩阵的下三角元素,即下图灰色部分 那么很显然,我们可以将这样一个对称矩阵压缩存储到一个一元数组中,从而节省较多的空间,接下来我们分析一下如何存储。 分析:第一行有一个 阅读详情
AI摘要

本文介绍了数组和矩阵的存储结构及压缩存储方法。包括一维、二维数组的存储结构,普通矩阵存储,对称、三角、三对角、稀疏矩阵的压缩存储。阐述了不同存储方式的原理、地址计算方法及优缺点,有助于理解数据结构中数组和矩阵的存储机制。


一.一维数组的存储结构:

1.知道一维数组的起始地址,就可以求出任意下标对应的元素所在的地址;

2.注:如果数组下标从1开始,上述公式的i就要改为i-1;

3.数组里的元素类型相同,因此所占空间也相同。


二.二维数组的存储结构:

1.注:数组的存储是连续(计算机的存储是线性的)的,针对非线性的二维数组,为了将其拉成线性结构,就有了行优先和列优先两种存储方式;

2.将非线性的二维数组整成线性的好处就是可以实现随机存取;

3.行优先时计算存储地址:公式中i为行,j为列

4.列优先时计算存储地址:公式中i为行,j为列


三.普通矩阵的存储:


四.对称矩阵(行数=列数且关于主对角线对称)的压缩存储:

由于对称矩阵关于主对角线对称,因此在存储对称矩阵的数据时只需要存储对称的一部分即可。

以只存储主对角线+下三角区域为例:

1.数组大小即数组存储的数据个数;

2.行优先中计算某个元素是第几个元素的公式推导:i为行,j为列,i和j全从1开始(一定要注意下标起始位置)

该元素上方有i-1行,第i行有i个元素(第i-1行有i-1个元素),因此前i-1行共有1+2+...+(i-1)个元素,

该元素所在行从第一个元素到该元素需要j个元素,所以该元素位置公式为[1+2+...+(i-1)]+j

根据对称性,下三角区域的元素将下标的行和列互换位置就可以访问上三角区域的元素:

总结:

要注意出题内容,以进行对应的分析:


五.三角矩阵的压缩存储:

1.下三角矩阵:除了主对角线和下三角区域外,都是常量且值相同;

2.上三角矩阵:除了主对角线和上三角区域外,都是常量且值相同;

3.对于是常量且值相同的那一部分,是无需重复存放那么多数据的,因此只需要处理主对角线和对应的三角区域(不是常量的一部分)即可;

4.将主对角线和对应的三角区域(不是常量的一部分)的数据存入一维数组,需要的内存大小为(1+2+...+n)+1:

公式解读:第n行有n个元素,所以n行需要1+2+...+n,最后还需要一个空间存放常量,因此

总内存大小为(1+2+...+n)+1

注:上三角区域的数据都是值相同的常量,被存放在同一个空间中,在一维数组中下标都一样

同理,对于上三角矩阵,第一行有n个元素,第二行有n-1个元素,由此可得第i行有n-(i-1)个元素

所以第i-1行有n-[(i-1)-1]=n-i+2个元素,前i-1行有1+2+...+(n-i+2)个元素


六.三对角矩阵的压缩存储:

i为行,j为列

1.存储时只需要存储三对角矩阵中的非0元素即可;

2.对于上述图片中三对角矩阵里蓝色框内的部分,第一行和最后一行只有两个元素,其他行都有三个元素,

因此,共有n行,共有2+3(n-2)+2=3n-2个元素,存储三对角矩阵的一维数组的长度为3n-2;

3.求前i-1行有几个元素时,只需要考虑第一行仅两个元素即可,因为重点在前几行,因此

前i-1行有2+3(i-1-1)=3(i-1)-1个元素

4.此时第i行就是当前行,所以小于或者等于;第i-1行就是上面的行,比他们大,不可能取等;

王道书中的k可以理解为要找的元素前总共有k个元素:


七.稀疏矩阵的压缩存储:

1.对于顺序存储稀疏矩阵,可以创建一个结构体,里面创建变量记录行,列,值,也就是该结构体对应一个数据,

再创建一个与该结构体对应的一维数组,就可以顺序的存储稀疏矩阵,

缺点:顺序存储稀疏矩阵访问其中的元素时只能依次遍历,无法随机存取:

2.对于十字链表法,定义如下图的数组,数组里存指针(指针数组),都指向非0元素:


八.总结:


特殊矩阵的压缩存储 特殊矩阵的主要形式有:(1)对称矩阵(2)上三角矩阵/下三角矩阵(3)对角矩阵它们都是方阵,即行数和列数相同。一、对称矩阵的压缩存储     若一个n阶方阵A[n][n]中的元素满足a i,j=a j,i(0≤i,j≤n-1),则称其为n阶对称矩阵。由于对称矩阵中的元素关于主对角线对称,因此在存储时可只存储对称矩阵中上三角或下三角中的元素,使得对称的元素共享一个存储空间。这样,就可以将n2个元素压... 阅读详情

相关推荐

特殊矩阵(对称矩阵)的压缩存储和解压缩

特殊矩阵(对称矩阵)的压缩存储和解压缩 参考书目:严蔚敏《数据结构》P95-96 一、背景 ​ 矩阵在工程计算中经常使用,对于一些特殊矩阵,比如对称矩阵,稀疏矩阵……有时为了节省空间,可以对这类矩阵进行压缩存储。这里只讨论对称矩阵,上(下)三角矩阵和对角矩阵,掌握对称矩阵其他就很容易了 二、压缩原则 ​ 为多个值相同的元素只分配一个存储空间,对零元素不分配空间。 三、对称矩阵的压缩 性质: 0<=i,j<=n-1(在 程序中 数组下标是从 0 开始的) 举例: 压缩:以行序为主序存

君兮故人辞的博客 9977

34-对称矩阵的压缩存储

对于矩阵这样由n行n列构成的数据集合,可以通过二维数组来进行存储。 在实际工程中也会用到一些特殊的矩阵, 特殊矩阵可以“压缩”的一种思维来降低空间需求。 (1)对角矩阵 (2)对称矩阵 (3)上三角矩阵/下三角矩阵 1. 对称矩阵的压缩存储 若一个n阶方阵A[n][n]中的元素满足aij=aji(0≤i,j≤n-1),则称其为n阶对称矩阵。 对称矩阵的压缩存储的策略: 存储...

网络安全 1万+

特殊矩阵的压缩存储(详细版 通俗易懂 含c语言稀疏矩阵十字链表代码 )

前言 此文章是本人第一篇博客,目的在于巩固过去所学的知识,同时可能会给大家带来一丝丝帮助,但由于没有经验加上本人能力极其有限,文章中可能存在不足之处,还请读者能够指正(`・ω・´)。 这篇文章首先会介绍矩阵压缩存储和特殊矩阵的基本概念,然后将会比较详细地说明几种特殊的矩阵:对称矩阵、三角矩阵、带状矩阵(三对角矩阵)、稀疏矩阵的压缩存储的策略,包括定量计算和十字链表的c语言代码,让我们开始吧! 注意,本文所用数组下标均为从0开始 正文 一.基本概念 压缩存储 在一个矩阵中,若多个数据的值相同,为

亿维数组's博客 5737

PTA4-1 数组和特殊矩阵的压缩存储

特别注意数组下标与元素地址的区别! 2-1 设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为() A.13 B.33 C.18 D.40 答:B; 行序为主存储,在此存储下三角矩阵元素,前7行有:(1+7)*7/2=28个元素,第八行中,a(8,5)前面还有四个元素,所以a(8,5)地址为28+4+1=33 2-2设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始

ZYQ_37210462的博客 3230

数据结构与算法: 特殊矩阵的压缩存储

一.三角矩阵的概念 以主对角线划分三角矩阵有下三角矩阵和上三角矩阵 下三角矩阵:矩阵(除主对角线)的上三角部分的值均为一个常数C或者0 上三角矩阵:与下三角矩阵相反 图示:(图中蓝色主对角线部分元素(一般情况)永远不都为一个常数或者0)                 二.压缩原理 根据上、下三角矩阵的特殊性(有一小半部分的元素都为一个常数...

Specif1c的博客 6353

ChatGPT Windows桌面版:从安全下载到高效配置的全流程指南

WebView封装技术是将网页应用转化为独立桌面程序的核心方法,它通过嵌入浏览器内核实现跨平台功能复用。其原理在于利用Electron或Tauri等框架,将Web内容打包进原生应用外壳,同时注入系统级API调用能力。这项技术的工程价值在于显著提升了Web应用的系统集成度和用户体验,使其能够支持全局快捷键、独立进程和本地数据存储等原生特性。在AI助手深度集成工作流的应用场景中,这种封装模式解决了浏览器多标签页切换繁琐、会话管理不便等痛点。本文以ChatGPT桌面客户端为例,详细解析了基于开源项目的安全下载路径

weixin_30437847的博客 486

03-3.5.1~4 特殊矩阵的压缩存储

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻🚀🙏。

G2Esports_NiKo的博客 1063

单细胞实战之数据净化三部曲:细胞周期校正、双胞体剔除与RNA污染清理——技术解析与实战指南

本文深入解析单细胞数据分析中至关重要的数据净化步骤,即细胞周期校正、双胞体剔除与RNA污染清理。通过实战代码演示与原理剖析,指导读者如何有效识别并去除技术噪音,从而获得更纯净、可靠的数据,为后续的细胞分群、差异表达等高级分析奠定坚实基础。

weixin_29274337的博客 205

特殊矩阵的压缩存储(上)

概述:主要是推导出上/下三角矩阵、对称矩阵存储在一维数组中的方法 a.下三角矩阵 一个n×n阶矩阵,i为行下标,j为列下标,i>=j的部分构成的三角矩阵,称为下三角矩阵,形式如下: a[0,0] a[1,0] a[1,1] a[2,0] a[2,1] a[2,2] 存储一个矩阵最直观的就是用二维数组存储,如果用一维数组存储的话,就会有一个...

java_t_t的博客 1933

关于RT-Thread中PWM无法正常输出的学习

按照官方的PWM配置,并没有输出PWM,网上有比较多的办法,试了很多,有些还是不能实现输出,这里做个记录。记录自己完成PWM输出的过程,以及修改的地方。 关于STM32CubeMX配置就不多说了,网上有很多。 首先必定是按照流程来,一定一定按照流程来!!! 需要注意的是加上通道数!!!! 这是流程上没有的,也是RTT的一点小BUG吧 配上board.c中添加的代码,我用的是PA2定时2的通道3,需要使用的朋友修改对应定时器和GPIO! void HAL_TIM_Base_MspInit(TIM_Han

weixin_42566346的博客 3554

Error: dependent ‘..\..\..\..\Qt\5.15.2\msvc2019\include\QtWidgets\QMainWindow‘ does not exist.

核心问题:修改 Build 目录为源码子目录后,MSVC 编译报错,本质是变量设置异常,导致 qmake 生成多余回溯路径;临时解决:在 .pro 文件添加;最优解决:将上述配置写入 Qt 的 msvc 对应 qmake.conf 全局文件,一劳永逸;禁止 qmake 计算路径时向上回溯,避免生成异常路径。

mumufan05的专栏 878

2.3特殊矩阵的压缩存储

2.上下三角矩阵,画图,不在要求的就转化,注意行优先还是列优先,然后注意数组下标从0开始。3.三对角矩阵:2,3,3,3,3,3,…,2,中间的元素i=j,可以确认位置。1.对称矩阵,数组下标从0开始,中间的ij相等,上面的j>i,下面的i>j。存储方法:1.数组(存放自定义数据类型:i,j,data)矩阵存储:出现在选择题,需要计算,先画图,防止出错。定义:对0元素不存储的矩阵。本质是个奇怪的链表,

chaganggang的博客 159

Qt 国产嵌入式操作系统实现文字转语音功能(ekho库)

Qt 国产嵌入式操作系统实现文字转语音功能(TTS)_tts驱动 转文字-优快云博客在继上篇文章之后,甲方粑粑不满意使用eSpeak发出的声音太难听了,这就不得不找个替代品,声音稍微好听了一些。使用ekho开源库。Ekho(余音)是一个免费、开源的中文语音合成软件。它目前支持粤语、普通话(国语)、诏安客语、藏语、雅言(中国古代通用语)和韩语(试验中),英文则通过Festival间接实现。Ekho支持Linux、Windows和Android平台。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 2754

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

💯矩阵的压缩存储:特殊矩阵有对称矩阵,三角矩阵,三对角矩阵,稀疏矩阵,数组是由n个相同类型的数据元素所构成的有限序列数组是线性表的推广:一维数组可以看做是一个线性表,而对于二维数组而言,可以看成是有多个线性表组成的线性表也就是每一行列视都为一个线性表,总的线性表内每一个元素也是一个定长的线性表。

DAY I 的成长之路 4456

LVGL v8学习笔记 | 09 - 进度条控件的使用方法(bar)

lv_bar_set_range必须放在lv_bar_set_mode前面,否则不生效。bar对象的API在lv_bar.h中声明,以lv_bar_xxx命名。此事件可以用来在进度条更新值之后更新别的控件(比如进度条旁边的文字)。可以看到,默认创建的进度条值是0到100。(3)设置进度条的范围值(最大值和最小值)(2)获取进度条的起始值。(3)获取进度条的最小值。(4)获取进度条的最大值。(1)设置进度条的当前值。(2)设置进度条的起始值。(1)获取进度条当前值。(5)获取进度条的模式。

Mculover666的博客(嵌入式) 1730

【Unity优化篇】| Unity3D场景 常用优化策略,遮挡剔除、层消隐距离技术 和 LOD多层次细节

本篇文章来简单介绍一下 Unity中几种常用3D场景优化策略 方法 对于整个项目来说,本文中出现的方法也只是冰山一角,慢慢积累学习吧! 内容包括遮挡剔除(Occlusion Culling)、层消隐距离技术 和 LOD多层次细节

努力前行,总会成为自己心中的那道光 1万+

特殊矩阵的压缩存储(公式详解)

在数据结构中需要考虑如何将矩阵更有效地存储在内存中,并能方便地提取矩阵中的元素。本文分析了如何将对称矩阵、三角矩阵以及三对角矩阵压缩至一维数组中,并对部分公式进行了分析和推导。

kusunoki的博客 4886

PCL 直通滤波

内容抄自优快云点云侠:[【2024最新版】PCL点云处理算法汇总(C++长期更新版)](https://blog.csdn.net/qq_36686437/article/details/114160640)。质量无忧,永久免费,可放心复制粘贴。

m0_51204289的博客 903

矩阵的压缩存储

对称矩阵、三角阵、带状矩阵(对角矩阵)的压缩存储方法;稀疏矩阵的四种常用的压缩存储方法:三元组、伪地址、邻接表、十字链表这四种表示方法,一文打尽。

丹丹的后花园 8644

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【数据结构】特别篇:特殊矩阵的压缩存储

前面共存储有 1 + 2 + 3 + 4 + 5 + 6 + 1 = 22 个元素 ( 数组下标范围为0 ~ 21 ),注意数组下标从 0 开始,故。n(n+1)/2+1] 中,则存放到 B[k] 中的非零元素。+ (n - j + 2) = (j-1)(2n - j + 2) / 2 个元素,,矩阵 M 的第一行有 12 元素,第二行有 11 个,第三行有 10 个,第四行有 9 个,第五行有 8 个,所以。共有 1 + 2 + 3 + …n(n+1)/2+1] 中, 则存放到B[k] 中的非零元素。

关注:https://github.com/Suhan42 1747

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数据结构(22)特殊矩阵的压缩存储

1、假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号 ,编写一个算法来别表达式中的括号是否配对,以字符“\0”作为算术表达式的结束符。 bool isPair(char *str) { int i = 0; stack<char> mystack; while (*(str+i) != '\0') { if (*(str + i) == '{' || *(str + i) == '[' || *(str + i) == '(') ...

李白 5044

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 3.11.队列的应用
下一篇: 4.2.串的定义和基本操作
巧克力拌面
博客等级 码龄3年 1153粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值