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

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

一维数组的存储结构

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}十字链表法 十字链表法

知识点回顾与重要考点

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

go-zero的rpc服务案例解析

go-zero的远程调用服务是基于gRpc的gRPC教程与应用。 zero使用使用gRpc需要安装protoc插件&#xff0c;因为gRpc基于protoc插件使用protocol buffers文件生成rpc服务器和api的代码的。 gRPC 的代码生成还依赖 protoc-gen-go&#xff0c;protoc-gen-go-grpc 插件来配合生成 Go…

论文阅读 (94):Substructure Aware Graph Neural Networks (SAGNN, AAAI2023)

文章目录 1 要点1.1 概述1.2 一些概念1.3 代码1.4 引用 2 基础知识2.1 符号2.2 信息传递神经网络 (MPNN) 3 方法3.1 子图提取3.1.1 基于节点的策略3.1.2 基于图的策略 3.2 随机游走返回概率编码3.3 子图信息注入的信息传递 1 要点 1.1 概述 题目&#xff1a;子结构感知图神经…

adb: failed to install .\xxxxxx.apk: Failure [INSTALL_FAILED_USER_RESTRICTED

开发者模式和USB调试均已打开&#xff0c;adb安装时报错。看了一下&#xff0c;小米手机还需要开启USB安装才行。 问题已解决

基于Hadoop的豆瓣电影的数据抓取、数据清洗、大数据分析(hdfs、flume、hive、mysql等)、大屏可视化

目录 项目介绍研究背景国内外研究现状分析研究目的研究意义研究总体设计数据获取网络爬虫介绍豆瓣电影数据的采集 数据预处理数据导入及环境配置Flume介绍Hive介绍MySQL介绍Pyecharts介绍环境配置及数据加载 大数据分析及可视化豆瓣影评结构化分析豆瓣电影类型占比分析豆瓣电影…

C语言数组练习

1、打印杨辉三角 #include <stdio.h> #include <string.h> int main(int argc, const char *argv[]) {int m;printf("please enter a value:");scanf("%d",&m);int arr[m][m];for(int i0;i<m;i){for(int j0;j<m-i;j)printf(" …

【STM32】GPIO

一、GPIO简介 1. 基本介绍 GPIO是通用输入输出端口的简称&#xff0c;STM32芯片通过GPIO与外设连接&#xff0c;从而实现与外设的数据收发。 最基本的输出功能是由STM32控制引脚输出高、低电平&#xff0c;实现开关控制。如把GPIO引脚接入到LED灯控制LED亮灭&#xff0c;或者…

49天精通Java,第0天,编程语言类型有哪些?我心中的TOP1编程语言,什么是java跨平台性?

目录 一、常见的编程语言类型1、机器语言2、汇编语言3、高级语言 二、计算机编程语言三、跨平台性1、跨平台的优势包括&#xff1a;2、实现跨平台的方式包括&#xff1a; 四、Java的跨平台性五、java运行时和虚拟机六、Java内存管理和Java垃圾回收1、Java内存管理2、Java垃圾回…

SSM学习笔记-------SpringMVC(二)

SSM学习笔记-------SpringMVC&#xff08;二&#xff09; SpringMVC_day021、SSM整合1.1 流程分析1.2 整合配置步骤1&#xff1a;创建Maven的web项目步骤2:添加依赖步骤3:创建项目包结构步骤4:创建SpringConfig配置类步骤5:创建JdbcConfig配置类步骤6:创建MybatisConfig配置类步…

ACL 2023|如何智能生成吸引人又符合实际的标题?

夕小瑶科技说 原创 作者 | 小戏、Python 标题生成&#xff0c;乍一看似乎并不是一个复杂的任务&#xff0c;要数据简单的爬虫就可以获得许多标题-文本对&#xff0c;要评价通过用户点击与浏览的次数就多少可以区分“好标题”与“坏标题”&#xff0c;万事俱备使用一些经典的监…

HTTP/HTTPS 简介||HTTP 消息结构

HTTP/HTTPS 简介 HTTP 协议是 Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写&#xff0c;是用于从万维网&#xff08; WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 HTTP 是一个基于 TCP/IP 通信协议来传递数据&a…

IBM N系列存储和NetApp FAS之间的对应关系

IBM在很长一段时间都是OEM NetApp的FAS存储作为他的NAS产品线&#xff0c;在IBM叫做Storage N series&#xff0c;就是N系列&#xff0c;在2014年IBM终止了和NetApp之间的OEM关系&#xff0c;目前在市场上的OEM的NetApp存储型号主要是 FAS3000&#xff0c;FAS31和FAS32的中端系…

【新星计划·2023】Linux系统的架构和组件讲解

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 前言 本文将讲解Linux系统的架构和组件。 目录 一、Linux系统的架构 1、硬件层 2、内核层 3、进程管理子系统 4、内存管理子系统 5、…

C语言 base32与base64加解密

概述 Base32、Base64编码就是分别用32个、64个可打印字符表示二进制数据。 一、Base32规则 32 2^5&#xff0c;所以需要5 Bit来表示一个base32字符。一个字节8 Bit&#xff0c;5和8的最小公倍数是40。编码的过程中&#xff0c;以5个字节为一组转为8个base32字符&#xff0c;不…

服务端⾼并发分布式结构演进之路

1.前置概念 应⽤&#xff08;Application&#xff09;/系统&#xff08;System&#xff09; 为了完成一整套服务的一个程序或相互配合的程序群 模块&#xff08;Module&#xff09;/组件&#xff08;Component&#xff09; 当应⽤较复杂时&#xff0c;为了分离职责&#xf…

2023年测试之路,从功能测试进阶测试开发工程师,突破内卷...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试开发工程师到…

SpringBoot配置外部Tomcat项目启动流程源码分析

前言 SpringBoot应用默认以Jar包方式并且使用内置Servlet容器(默认Tomcat)&#xff0c;该种方式虽然简单但是默认不支持JSP并且优化容器比较复杂。故而我们可以使用习惯的外置Tomcat方式并将项目打War包。 【1】创建项目并打War包 ① 同样使用Spring Initializer方式创建项目 …

并发编程_jmm部分

1. JMM 理解 前提&#xff1a;并发编程有3大问题&#xff0c;可见性、有序性、原子性。 导致可见性的原因是缓存&#xff0c;有序性的原因是 编译器优化。解决方法就是直接禁用缓存和编译器优化&#xff0c;导致程序性能堪忧。 因此合理的方案就是按需禁用缓存和编译器优化。 …

JUC之ThreadLocal

文章目录 1 基础知识1.1 强软弱虚四种引用 2 ThreadLocal出现的好处3 ThreadLocal源码分析3.1 ThreadLocal内存泄露问题3.2 ThreadLocal为什么使用的是弱引用3.3 清扫过期的Entry 4 ThreadLocal使用建议 1 基础知识 1.1 强软弱虚四种引用 【整体结构】 【强引用】 【软引用…

初始网络原理

目录 网络发展史 独立模式 网络互连 局域网LAN 广域网WAN 网络通信基础 IP地址 端口号 认识协议 五元组 协议分层 OSI七层模型 TCP/IP五层&#xff08;或四层&#xff09; 网络设备所在分层 封装和分用 网络发展史 独立模式 独立模式&#xff1a;计算机之间相互…

【技能实训】Day01

文章目录 任务1 项目准备一、开发环境二、系统简介三、项目创建 任务2【任务2.1】菜单项设计及其测试【任务2.2】使用数组存储采集的数据【任务2.3】控制显示采集的数据 任务1 项目准备 一、开发环境 1.JDK8下载及其环境变量配置(JDK8以上版本) 2.IDE &#xff1a;Eclipse 或…