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

news2024/12/24 20:46:17

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

一维数组的存储结构

ElemType a[10]; //ElemType型一维数组

各数组元素大小相同,且物理上连续存放。
数组元素a[i]的存放地址= LOC + i * sizeof(ElemType) ( 0 ≤ i < 10 ) (0\le i < 10) (0i<10)
注:除非题目特别说明,否则数组 下标默认从 0 开始 \color{red}下标默认从0开始 下标默认从0开始
注意审题 ! 易错 ! \color{purple}注意审题!易错! 注意审题!易错!

二维数组的存储结构

ElemType b[2][4];//2行4列的二维数组

逻辑视角 : 逻辑视角: 逻辑视角:

内存视角: 内存视角: 内存视角:

行优先存储

M行N列的二维数组b[M][N]中,若按行优先存储,则b[i][i]的存储地址= LOC+( i * N + j) * sizeof(ElemType)

列优先存储

M行N列的二维数组b[M][N]中,若按列优先存储,则b[i][li]的存储地址= LOC+( j * M+ i ) * sizeof(ElemType)

普通矩阵的存储

可用二维数组存储 \color{red}可用二维数组存储 可用二维数组存储

注意:描述矩阵元素时,行、列号通常从1开始;而描述数组时通常下标从0开始
(具体看题目给的条件,注意审题!)

特殊矩阵的存储

某些特殊矩阵可以压缩存储空间 \color{red}某些特殊矩阵可以压缩存储空间 某些特殊矩阵可以压缩存储空间

对称矩阵的压缩存储

n n n 方阵 \color{green}方阵 方阵中任意一个元素 a i , j \color{green}{a_{i,j}} ai,j ,都有 a i , j = a j , i \color{green}{a_{i,j} = a_{j,i}} ai,j=aj,i 则该矩阵为对称矩阵
普通存储: n ∗ n n*n nn 二维数组
压缩存储策略:只存储主对角线+下三角区(或主对角线+上三角区)

策略 \color{purple}策略 策略:只存储主对角线+下三角区
行优先 \color{red}行优先 行优先原则将各元素存入一维数组中。

思考:
①数组大小应为多少?
②站在程序员的角度,对称矩阵压缩存储后怎样才能方便使用?
回答:
①(1+n)*n/2
②可以实现一个“映射”函数:矩阵下标→一维数组下标

K e y \color{red}Key Key:按 行优先 \color{green}行优先 行优先的原则, a i , j a_{i,j} ai,j 是第几个元素?

三角矩阵的压缩存储

下三角矩阵:除了主对角线和下三角区,其余的元素都相同

上三角矩阵:除了主对角线和上三角区,其余的元素都相同

下三角矩阵

压缩存储策略:按 行优先 \color{red}行优先 行优先原则将橙色区元素存入一维数组中。并 在最后一个位置存储常量 c \color{red}在最后一个位置存储常量c 在最后一个位置存储常量c

K e y \color{red}Key Key:按 行优先 \color{red}行优先 行优先的原则, a i , j a_{}i,j ai,j是第几个元素?

上三角矩阵

压缩存储策略:按 行优先 \color{red}行优先 行优先原则将绿色区元素存入一维数组中。并 在最后一个位置存储常量 c \color{red}在最后一个位置存储常量c 在最后一个位置存储常量c

K e y \color{red}Key Key:按 行优先 \color{red}行优先 行优先的原则, a i , j a_{i,j} ai,j是第几个元素?

三对角矩阵的压缩存储

三对角矩阵 三对角矩阵 三对角矩阵,又称 带状矩阵 带状矩阵 带状矩阵:
∣ i − j ∣ > 1 |i-j|>1 ij>1时,有 a i , j = 0 ( 1 ≤ i , j ≤ n ) a_{i,j}=0 ( 1 \le i, j ≤ n) ai,j=0(1i,jn)

压缩存储策略 : \color{black}压缩存储策略: 压缩存储策略:
行优先 \color{red}行优先 行优先(或列优先)原则,只存储带状部分

K e y \color{red}Key Key:按 行优先 \color{red}行优先 行优先的原则, a i , j a_{i,j} ai,j是第几个元素?

若已知数组下标k,如何得到i, j?
B [ k ] → a i , j B[k] \to a_{i,j} B[k]ai,j

第k+1个元素,在第几行?第几列?
i − 1 i-1 i1 行共 3 ( i − 1 ) − 1 3(i-1)-1 3(i1)1 个元素
i i i 行共 3 i − 1 3i-1 3i1 个元素
显然, 3 ( i − 1 ) − 1 < k + 1 ≤ 3 i − 1 3(i-1)-1<k+1 ≤ 3i-1 3(i1)1<k+13i1

i ≥ ( k + 2 ) / 3 i ≥ (k+2)/3 i(k+2)/3
可以理解为“刚好”大于等于

$i = ⌈ k + 2 3 ⌉ \left\lceil\dfrac{k+2}{3}\right\rceil 3k+2
向上取整即可满足“刚好”大于等于

第k+1个元素,在第几行?第几列?

i = ⌈ ( k + 2 ) / 3 ⌉ \left\lceil(k+2)/3\right\rceil (k+2)/3

i = ⌊ ( k + 1 ) / 3 + 1 ⌋ \left\lfloor(k+1)/3+1\right\rfloor (k+1)/3+1

k = 2 i + j − 3 k = 2i+j-3 k=2i+j3,得 j = k − 2 i + 3 j = k- 2i+ 3 j=k2i+3

稀疏矩阵的压缩存储

稀疏矩阵 \color{red}稀疏矩阵 稀疏矩阵:非零元素远远少于矩阵元素的个数

压缩存储策略:
顺序存储 ―― 三元组<行,列,值>

压缩存储策略二:
链式存储―― 十字链表法 \color{red}十字链表法 十字链表法

知识点回顾与重要考点

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

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

相关文章

Win10不香了吗?微软 Win11 份额涨至 35.75% 创新高

根据 Valve 公司的最新调查结果&#xff0c;Windows 11 在 Steam 平台上的用户数量正稳步增长&#xff0c;预计将超过36%的比例。Steam定期进行用户软硬件情况调查&#xff0c;旨在提供可靠的数据支持供公司和游戏开发者用于未来的决策制定。此调查选择参与用户的方式是随机的&…

树莓派学习笔记12-安装使用PyZbar

树莓派学习笔记12-安装使用PyZbar 前言 通过树莓派外接USB摄像头&#xff0c;实现条形码的识别&#xff0c;并串口&#xff08;USB串口&#xff09;打印条形码的内容。 前期准备 硬件&#xff1a;树莓派4B 系统&#xff1a;Raspios-2021-03-04 编译器&#xff1a;Thonny 视…

如何基于GeoToolKit/INT实现矢量流线的聚集动画效果示例

继续在上一篇文章的基础上&#xff0c;利用相同的数据处理方法统一了不同年代地层的数据格式&#xff08;目前js解析支持的格式有ZMap、TS、XYZ和XYZA等&#xff09;&#xff0c;本文主要基于GeoToolKit/INT组件&#xff0c;针对地质研究经常在二维等值线基础上模拟计算地层中物…

【C++3】crontab,ftp

文章目录 1.生成数据&#xff1a;crontab2.ftp&#xff1a;ftp是tcp/ip协议族中一员&#xff0c;分客户端和服务端2.1 安装&#xff1a;linux操作系统的用户也是ftp的用户&#xff0c;可以配置专用的ftp用户&#xff0c;专用的ftp用户只能用于ftp&#xff0c;不能登录操作系统2…

ROS2移动机器人导航仿真

环境&#xff1a;Ubuntu 18.04 ros2 eloquent wget http://fishros.com/install -O fishros && . fishros1.安装turtlebot3相关功能包 sudo apt install ros-eloquent-turtlebot3* ref&#xff1a; https://docs.ros.org/ ROS2导航SLAM建图探索_鱼香ROS的博客-CSD…

蛋白组学 代谢组

https://www.cnblogs.com/yanzhi123/p/11712926.htmlhttps://www.cnblogs.com/yanzhi123/p/11712926.html【3】蛋白质组学鉴定软件之Mascot - 简书 (jianshu.com) 【6】蛋白质组学鉴定定量软件之MaxQuant - 简书 (jianshu.com) 基于Maxquant软件处理的LabelFree蛋白质组学 首…

图灵第4期MySQL调优专题学习笔记

目录 一、首先复习打印的课件 二、Explain中的列 三、解读extra 四、索引最佳实践 五、MySQL的内部组结构 2. bin-log归档&#xff1a; 六、常见SQL深入优化 1. order by 与 group by 优化 2. 索引设计原则 3. 分页查询优化&#xff08;根据非主键字段排序的分页查询…

Verilog基础之十三、ROM实现

目录 一、前言 二、非IP核设计 2.1 工程设计文件读取初始化 2.2 测试代码 2.3 仿真结果 三、IP核创建ROM 3.1 IP核生成ROM 3.2 设计代码 3.3 测试代码 3.4 仿真结果 四、modelsim设置 4.1 模拟信号显示 4.2 信号范围显示设置 五、数据文件 一、前言 对于工程中的…

IMX6ULL系统移植篇-uboot启动Log信息

一. 进入uboot 命令模式 只有启动 uboot&#xff0c;进入 uboot的命令行模式时&#xff0c;才能使用 uboot 的命令。 当开发板启动时&#xff0c;快速按下回车键即可进入 uboot命令行模式。这时&#xff0c;进入 uboot 的命令行模式以后输入“help” 或者 “&#xff1f;” &a…

基因遗传进化算法-找最优路径

import random import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"]["SimHei"] #设置字体 plt.rcParams["axes.unicode_minus"]False #该语句解决图像中的“-”负号的乱码问题# 创建初始种群 def create_initial_population():popu…

1024天,CSDN上的时间之旅

1024天&#xff0c;CSDN上的时间之旅 感想收获未来规划职业规划创作规划 感想 今天是在CSDN这个博客上成为博主已经迈入了1024天。这个数字对于计算机领域来说&#xff0c;具有特殊的含义和重要性。 在计算机科学中&#xff0c;1024是2的十次方&#xff0c;也就是2^10。这意味…

rt-thread------串口V1(三)接收

系列文章目录 rt-thread 之 fal移植 rt-thread 之 生成工程模板 STM32------串口理论篇 rt-thread------串口V1版本&#xff08;一&#xff09;配置 rt-thread------串口V1版本&#xff08;二&#xff09;发送篇 文章目录 系列文章目录一、串口的接收中断接收DMA接收 一、串口…

从一次netty分享漫谈

从一次netty分享漫谈 1.前言 上周五&#xff0c;笔者所在的开发小组&#xff0c;组织了一场分享&#xff0c;内容是netty的入门。笔者所在的团队&#xff0c;基本上就是在各条业务线中活蹦乱跳&#xff0c;有经验的看官&#xff0c;到这里已经可以给出分享效果的总体预测&…

Gradle 各个版本下载

每次都要找下载地址&#xff0c;还是记录一下好找点。 http://services.gradle.org/distributions

Unreal 5 官方在Niagara里模拟大型群体笔记

官方视频地址&#xff1a;https://www.bilibili.com/video/BV1FX4y1T7z2/ 如果需要&#xff0c;请查看官方视频。 性能测试 在讲解Niagara之前&#xff0c;视频首先做了一个性能测试&#xff0c;首先放置了100个AI角色&#xff0c;可以想目标角色移动的ai&#xff0c;然后测试…

C语言:猜凶手

题目&#xff1a; 日本某地发生了一件谋杀案&#xff0c;警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说&#xff1a;不是我。 B说&#xff1a;是C。 C说&#xff1a;是D。 D说&#xff1a;C在胡说 已知3个人说了真话&#xff0c;1个人说的是假话。…

山西电力市场日前价格预测【2023-07-03】

日前价格预测 预测明日&#xff08;2023-07-03&#xff09;山西电力市场全天平均日前电价为333.50元/MWh。其中&#xff0c;最高日前电价为398.66元/MWh&#xff0c;预计出现在15: 15。最低日前电价为280.73元/MWh&#xff0c;预计出现在24: 00。 以上预测仅供学习参考&#x…

Spring第一讲:Spring基础概念和环境搭建

一、Spring是什么 Spring 是 Java EE 编程领域的一款轻量级的开源框架&#xff0c;由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立&#xff0c;它的目标就是要简化 Java 企业级应用程序的开发难度和周期。 Spring 自诞生以来备受青睐&#xff0c;一直被广大开发…

二叉树各种函数的实现

如果你觉得迷茫&#xff0c;那就尽可能选择比较困难的路。 目录 前言&#xff1a; &#x1f340;一.通过前序遍历创建二叉树 &#x1f341;二.二叉树的四种遍历 &#x1f342;1.二叉树的前序遍历 &#x1f33c;2.二叉树的中序遍历 &#x1f34c;3.二叉树的后序遍历 …

Mac VSCode配置运行单个C++文件

题外话&#xff1a;VSCode一键整理代码快捷键&#xff1a;ShiftoptionF 方法一&#xff1a;命令行直接编译 g -o 想创建的可执行文件名 ./cpp文件名 ./可执行文件名 以test.cpp为例&#xff0c;我创建的可执行文件名为test&#xff0c;运行结果如下&#xff1a; 方法二&#…