数据结构-4.1.特殊矩阵的压缩存储
一.一维数组的存储结构:
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元素:
八.总结:
相关文章:

数据结构-4.1.特殊矩阵的压缩存储
一.一维数组的存储结构: 1.知道一维数组的起始地址,就可以求出任意下标对应的元素所在的地址; 2.注:如果数组下标从1开始,上述公式的i就要改为i-1; 3.数组里的元素类型相同,因此所占空间也相同…...
Hive数仓操作(十四)
一、Hive的DDL语句 在 Hive 中,DDL(数据定义语言)语句用于数据库和表的创建、修改、删除等操作。以下是一些重要的 DDL 语句: 1. 创建数据库和表 创建数据库 CREATE DATABASE IF NOT EXISTS database_name;创建表 CREATE TABLE …...
SpringBoot技术:实现古典舞在线交流平台的秘诀
摘 要 随着互联网技术的发展,各类网站应运而生,网站具有新颖、展现全面的特点。因此,为了满足用户古典舞在线交流的需求,特开发了本古典舞在线交流平台。 本古典舞在线交流平台应用Java技术,MYSQL数据库存储数据&#…...

自动驾驶系列—全面解析自动驾驶线控制动技术:智能驾驶的关键执行器
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...

YOLO11改进|卷积篇|引入可变核卷积AKConv
目录 一、AKConv卷积1.1AKConv卷积介绍1.2AKConv核心代码 五、添加MLCA注意力机制5.1STEP15.2STEP25.3STEP35.4STEP4 六、yaml文件与运行6.1yaml文件6.2运行成功截图 一、AKConv卷积 1.1AKConv卷积介绍 AKConv允许卷积参数的数量以线性方式增加或减少,而不是传统的…...

推荐 uniapp 相对好用的海报生成插件
插件地址:自定义canvas样式海报 - DCloud 插件市场 兼容性也是不错的:...
MySQL表操作(进阶)
一、数据库约束 1、约束类型 NOT NULL - 指示某列不能存储 NULL 值 UNIQUE - 保证某列的每行必须有唯一的值 DEFAULT - 规定没有给列赋值时的默认值 PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识ÿ…...

【设计模式】软件设计原则——接口隔离迪米特
接口隔离原则引出 接口隔离原则 定义:用多个专门的接口,不使用单一的总接口,客户端不应该依赖它不需要的接口; 一个类对另一个类的依赖,应该建立在最小接口上;如果有一个大接口,里面有很多方法,如果使用一个类实现该接口,所有的类都要实现,导致代码冗余;…...

【C++】——list的介绍和模拟实现
P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:Yan. yan. …...

B树系列解析
我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》࿱…...
docker 部署 WEB IDE
简介 问题描述:GitCode 的 Web IDE 不满足个人使用需求 如何解决:在本机或云服务器部署 Web IDE 如何解决 拉取容器镜像 docker pull coder/code-server 运行 docker run -d --name vscode -p 8080:8080 -p 8443:8443 -e PASSWORD"123456&quo…...

【Android】数据存储
本章介绍Android五种主要存储方式的用法,包括共享参数SharedPreferences、数据库SQLite、SD卡文件、App的全局内存,另外介绍重要组件之一的应用Application的基本概念与常见用法,以及四大组件之一的内容提供器ContentProvider的基本概念与常见…...
个人网络安全的几个重点与防御
1 浏览器 firefox 这是第一选择 如果你真的不明白可以找找各个浏览器漏洞 mail 的危险的 来自与代理和漏洞 浏览器溢出漏洞 实时注意更新就可以 2 防火墙 大家都用windows 只需在 gpedit.msc 设置 但有什么未知漏洞就不得而知了 因为美国的计划问题 网络端口溢出漏洞 但…...

python爬虫 - 初识爬虫
🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、爬虫的关键概念 (一)HTTP请求与响应 ࿰…...

tomcat版本升级导致的umask问题
文章目录 1、问题背景2、问题分析3、深入研究4、umask4.1、umask的工作原理4.2、umask的计算方式4.3、示例4.4、如何设置umask4.5、注意事项 1、问题背景 我们的java服务是打成war包放在tomcat容器里运行的,有一天我像往常一样去查看服务的日志文件,却提…...

Golang | Leetcode Golang题解之第455题分发饼干
题目: 题解: func findContentChildren(g []int, s []int) (ans int) {sort.Ints(g)sort.Ints(s)m, n : len(g), len(s)for i, j : 0, 0; i < m && j < n; i {for j < n && g[i] > s[j] {j}if j < n {ansj}}return }...

vscode+stfp插件,实现远程自动同步文件代码
概述 远程同步代码,将本地代码实时保存到同一局域网内的另一台电脑(linux系统),这里的本地代码也可以是远程服务上的代码,即从一个远程ip同步到另一台远程ip服务器。 工具 vscode,SFTP插件 安装 vscod…...
python 实现djb2哈希算法
djb2哈希算法介绍 DJB2哈希算法是一种简单且快速的哈希算法,由Daniel J. Bernstein设计。这种算法的实现非常简单,适用于短键值的哈希表,也常被用于嵌入式设备和资源受限的系统。 基本原理 DJB2算法的原理是将输入的字符串视为一个字节数组…...
文件夹作为普通文件而非子模块管理
relaxed_ik_ros2 文件夹下存在 .gitmodules 文件和 .gitignore 文件。这说明该目录已经被 Git 识别为子模块。 要将这个文件夹作为普通文件而非子模块管理,你可以按以下步骤操作: 1. 删除子模块配置 首先删除 .gitmodules 文件中的子模块配置。你可以…...

7c结构体
文章目录 一、结构体的设计二、结构体变量的初始化2.1结构体在内存表示;**2.2**结构体类型声明和 结构体变量的定义和初始化只声明结构体类型声明类型的同时定义变量p1用已有结构体类型定义结构体变量p2*定义变量的同时赋初值。*匿名声明结构体类型 2.3 结构体嵌套及…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...