数据结构-4.1.特殊矩阵的压缩存储

news2024/12/23 23:21:46


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

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元素:


八.总结:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2183394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

九、设备的分配与回收

1.设备分配时应考虑的因素 ①设备的固有属性 设备的固有属性可分为三种:独占设备、共享设备、虚拟设备。 独占设备 一个时段只能分配给一个进程(如打印机) 共享设备 可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备而微观上交替使用。 …

【Orange Pi 5嵌入式应用编程】-用户空间UART通信

用户空间UART通信 文章目录 用户空间UART通信1、理解UART通信1.1 什么是UART通信?1.2 UART如何工作?1.3 UART传输步骤1.4 UART的优缺点2、嵌入式Linux中的UART3、Orange Pi 5中UART完整示例3.1 UART操作函数定义3.2 UART定义函数实现1、理解UART通信 UART是Universal Asynch…

松山湖全球首秀:传祺华为概念车发布

9月24日晚,传祺与华为联合举办的创「新」计划成果分享会暨全新概念车品鉴会,在华为东莞松山湖基地圆满落幕。 作为本次活动的焦点,传祺与华为双方联手打造的首款概念车「1 Concept」,也在会场正式登场亮相,这也标志着传…

动态分配内存

目录 前言 一.malloc,free函数 1.malloc,free函数原型 2.使用方法 3.具体实例 4.注意事项 二.calloc函数 1.calloc函数原型 2.主要特点 3.使用案例 三.realloc函数 1.realloc函数原型 2.使用案例 3.注意事项 前言 动态内存是指在程序运行时,按需分配和…

Java网络通信—TCP

1.客户端 2.服务端

OpenGL ES 纹理(7)

OpenGL ES 纹理(7) 简述 通过前面几章的学习,我们已经可以绘制渲染我们想要的逻辑图形了,但是如果我们想要渲染一张本地图片,这就需要纹理了。 纹理其实是一个可以用于采样的数据集,比较典型的就是图片了,我们知道我…

【ios】---swift开发从入门到放弃

swift开发从入门到放弃 环境swift入门变量与常量类型安全和类型推断print函数字符串整数双精度布尔运算符数组集合set字典区间元祖可选类型循环语句条件语句switch语句函数枚举类型闭包数组方法结构体 环境 1.在App Store下载Xcode 2.新建项目(可以先使用这个&…

AKShare-股票数据-相关股票

AKShare-股票数据-相关股票 数据科学实战 数据科学实战 2024年10月01日 13:53 作者寄语 本次更新股票数据-相关股票接口。主要修复该接口,目前通过该接口可以获取 时间,股票代码,相关股票代码,涨跌幅 等字段的数据。 欢迎加入专…

Java之方法的使用

修饰符 返回值 方法名称(形式参数){ } 当无参数的时候形式参数中什么都不写。 列如求两个数相加 修饰符可有可无。 方法重载: 1.方法名相同 2.参数列表不同 3。返回值不影响重载

STL--string类

我们从这篇文章之后就正式开始学习STL的string,字面看起来是不是像C语言里面的字符串之类的处理方法,是的,C里面也是对字符串的一些处理函数,但是C有很多这样的函数,给大家推荐一个网站 ,这个网站是C的官网…

Python | Leetcode Python题解之第448题找到所有数组中消失的数字

题目&#xff1a; 题解&#xff1a; class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:n len(nums)for num in nums:x (num - 1) % nnums[x] nret [i 1 for i, num in enumerate(nums) if num < n]return ret

Verilog基础:$display系统函数和C语言中的库函数printf的区别

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 Verilog中的$display系统函数和C语言中的库函数printf都是用于输出信息&#xff0c;但它们的用法存在一定差别&#xff0c;本文将简要描述。 $display系统函数的B…

Javaweb商城项目

smbms 视频教程&#xff1a;javaweb-30&#xff1a;smbms项目搭建_哔哩哔哩_bilibili 一.项目分析 1.项目结构 2.数据库表 CREATE DATABASE smbms;USE smbms;DROP TABLE IF EXISTS smbms_address;CREATE TABLE smbms_address (id bigint(20) NOT NULL AUTO_INCREMENT CO…

计算机毕业设计 家校互联管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

2024年录屏软件排行榜:班迪录屏等四款软件实测!

不论是学习、娱乐还是工作&#xff0c;都有可能需要用到屏幕录制功能。在这篇文章中&#xff0c;我们将从不同的使用场景出发&#xff0c;为大家推荐几款实用的录屏工具——福昕录屏大师、转转大师录屏、爱拍录屏以及班迪录屏。 Foxit REC 直达链接&#xff08;复制到浏览器打…

Flexible组件的用法

文章目录 1. 概念介绍2. 使用方法3. 示例代码我们在上一章回中介绍了扩展内容相关的知识,本章回中将介绍Flexible组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在前面章回中介绍了扩展列表相关的内容,当页面中其它组件和扩展列表一起使用时,扩展列表有可能会…

SpringBoot——基础配置

但是还需要删除pom.xml中的标签——模板的文件也同样操作 banner的选项——关闭 控制台 日志 banner图片的位置——还会分辨颜色 在 Java 的日志框架&#xff08;如 Logback、Log4j2 等&#xff09;中&#xff0c;logging.level.root主要用于设置根日志记录器的日志级别…

【Redis】如何在 Ubuntu 上安装 Redis 5

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 本期内容主要介绍如何在 Ubuntu 上安装 Redis5 一些碎碎念&#xff1a; 本来这期内容介绍如何在 Centos 安装 Redis …

常用的Java安全框架

Spring Security&#xff1a; 就像Java安全领域的“瑞士军刀”&#xff0c;功能全面且强大。 支持认证、授权、加密、会话管理等安全功能。 与Spring框架无缝集成&#xff0c;使用起来特别方便。 社区活跃&#xff0c;文档丰富&#xff0c;遇到问题容易找到解决方案。 Apach…

SigmaStudio控件Cross Mixer\Signal Merger算法效果分析

衰减与叠加混音算法验证分析一 CH2:输入源为-20dB正弦波1khz CH1叠加混音&#xff1a;参考混音算法https://blog.csdn.net/weixin_48408892/article/details/129878036?spm1001.2014.3001.5502 Ch0衰减混音&#xff1a;外部多个输入源做混音时&#xff0c;建议参考该算法控件&…