当前位置: 首页 > news >正文

数据结构(其四)--特殊矩阵的存储

目录

11.特殊矩阵的压缩存储

(1).一维数组的储存结构

(2).二维数组的存储结构

(3).普通矩阵的存储

(4).特殊矩阵的压缩存储

        i.对称矩阵

        ii.三角矩阵

        iii.三对角矩阵

        iiii.稀疏矩阵


11.特殊矩阵的压缩存储

(1).一维数组的储存结构

        int a[10];

        一维数组的地址是连续的,只要知道了起始地址(LOC,默认是a[0]的地址),就可以知道所有元素的地址。

        

        a[i] 地址的计算 :LOC + i * sizeof(int) .

        注意:有时候给出的LOC可能不是a[0] 的,此时,就要在上式子的i 中减去,如给出的是a[1]的,则计算公式变为 LOC + (i - 1) * sizeof(int).

(2).二维数组的存储结构

        int b[2][4]

        二维数组在内存中有两种存储方法,行优先和列优先。

        当然,从逻辑视角上看,将数据配列成矩阵的样式,更方便进行操作。

        有int b[M][N],b[0][0] 的地址为LOC,则b[i][j]

        行优先:LOC + (i*N + j)*sizeof(int)

        列优先:LOC + (j*M + i)*sizeof(int) 

(3).普通矩阵的存储

        一般是用二维数组

        需要注意的是,矩阵的下标是从(1, 1) 开始的,数组是从(0, 0) 开始的。

(4).特殊矩阵的压缩存储

        i.对称矩阵

        · 是方阵(n阶),

        · 恒有 aij == aji,

        因为对称,所以可以只存储下三角区和对称轴(或上三角区和对称轴)(这样就是所谓的压缩存储)

        

        按行优先将各元素存入一维数组(也可以列优先),

        如此便要思考,

        数组的大小,显然,第一行一个元素,第二行两个元素...第N行N个元素,总数就是n*(n+1)/2.

        数据的调用,因为矩阵的下标与数组的下标规则不同,可以写一个简单的映射函数进行转换

        aij => b[k]

        总结上图,可知

        k = (i+1)*i/2 + j - 1 ,

        即当前元素行数往上为等差数列求和,再加上列数,就是在数组中的第几个元素,再减一,就成了数组下标。(如果,题干给出的数组起始下标为1,k就不需要减去那个1)

        ii.三角矩阵

        

        压缩存储策略:储存aij的三角区,将常数储存在数组最后一位。(以下三角为例)

        数组大小,n*(n+1)/2 + 1.

        aij的ij 与数组下标之间的相互转换与上文相同。

        获取常数项,数组下标就是 n*(n+1)/2。

         值得一提的,在上三角中,求aij是数组中的第几个元素,观察图可知,每行的元素数由N个依次递减。所以,aij 前面有 [n + ... + (n - i + 2)] + (j - i)个元素,中括号里的是此行往上的,那个j-i是当前行内aij 之前的元素。

        iii.三对角矩阵

       以行优先为例,

        数组大小3n - 2

        数组下标(对于aij),前(i - 1)行,有3(i - 1) - 1个元素(每行有三个元素,但第一行只有两个);第i 行中,aij是第j - i + 2个元素,所以aij 就是第2i + j - 2(前后相加)。

        k = 2i + j - 3

        由数组下标逆推矩阵下标ij

        已知b[k]

        是第k + 1个元素,在前i-1行,与前i行之间,3(i - 1) - 1 < k + 1 <= 3i - 1

        i >= (k + 2)/3,左式算出结果后向上取整就是i 值

        (向上取整:如1.2,向上取整就是2,向下就是1) 

        iiii.稀疏矩阵

        压缩策略:

         ① 顺序存储------设置一个类,其中包含三个数组,分别存储i、j、非零数据。

        ② 十字链表法----此为链式存储,

        结点中,包含行、列、值以及两个指针。

        两个指针分别指向同一列的下一个结点和同一行的下一个结点。

相关文章:

数据结构(其四)--特殊矩阵的存储

目录 11.特殊矩阵的压缩存储 &#xff08;1&#xff09;.一维数组的储存结构 &#xff08;2&#xff09;.二维数组的存储结构 &#xff08;3&#xff09;.普通矩阵的存储 &#xff08;4&#xff09;.特殊矩阵的压缩存储 i.对称矩阵 ii.三角矩阵 iii.三对角矩阵 iiii.稀疏矩…...

系统化学习 H264视频编码(06)哥伦布编码

说明&#xff1a;我们参考黄金圈学习法&#xff08;什么是黄金圈法则?->模型 黄金圈法则&#xff0c;本文使用&#xff1a;why-what&#xff09;来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法&#xff0c;理论方面会更多地讲清楚 音视频中概念的…...

手机在网状态接口如何对接?(一)

一、什么是手机在网状态&#xff1f; 传入手机号码&#xff0c;查询该手机号的在网状态&#xff0c;返回内容有正常使用、停机、在网但不可用、不在网&#xff08;销号/未启用/异常&#xff09;、预销户等多种状态。 二、手机在网状态使用场景&#xff1f; 1.信贷审核&#…...

数据结构链表2(常考习题1)(C语言)

移除链表元素&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 解题思路&#xff1a; 情况1&#xff1a; 情…...

Rust的运行时多态

Rust的运行时多态 Rust的静态多态即编译时多态&#xff0c;通过**泛型特征约束&#xff08;Generic Type Trait Constrait&#xff09;**来实现&#xff1b; 那么动态多态&#xff08;运行时多态&#xff09;呢&#xff1f;答案是特征对象&#xff08;Trait Object&#xff…...

sqllabs通关

sqllabs5:(报错注入) ?id1 回显You are in........... ?id2-1 回显You are in........... ?id1 回显 1 LIMIT 0,1 判断是字符型&#xff0c;闭合。?id1order by 3-- //页面显示正常我们试了4行得出是报错注入 我们先爆库名 http://127.0.0.1/sqli-labs-master/L…...

RTSP系列四:RTSP Server/Client实战项目

RTSP系列&#xff1a; RTSP系列一&#xff1a;RTSP协议介绍-CSDN博客 RTSP系列二&#xff1a;RTSP协议鉴权-CSDN博客 RTSP系列三&#xff1a;RTP协议介绍-CSDN博客 RTSP系列四&#xff1a;RTSP Server/Client实战项目-CSDN博客 目录 一、RTSP Server实战项目 1、准备 2、…...

sqli-labs-php7-master第11-16关

猜注入点 先来猜数字型 单引号字符型&#xff1a; 发现注入点找到了 猜测数据库有多少个字段&#xff1a; 1’ order by 4 # 密码随便输的。 这里没有使用--注释&#xff0c;因为没作用&#xff0c;可能是过滤掉了 继续猜。刚才没猜对 1 order by 2 # 没报错&#xff0c;猜…...

c++初阶 string的底层实现

string 基础函数成员成员变量构造函数析构函数&#xff1a;拷贝构造赋值构造 遍历下标访问迭代器 增删插开辟空间push_backappendinserterase 功能函数swapfindc_strsubstrclear 其他函数比较函数流提取<<流插入>>getline 完整版 声明&#xff1a;非纯手搓&#xf…...

微信小程序实现上传照片功能

案例&#xff1a; html: <view class"zhengjianCont fontSize30" style"margin-bottom: 40rpx;"><view class"kuai"><image binderror"imageOnloadError" bind:tap"upladPhoto" data-params"business…...

lombok安装成功但是找不到方法

2024.1.1版本的IDE的插件安装了默认的lombok&#xff08;如图1&#xff09;&#xff0c;pom文件中也引入了lombok的依赖&#xff0c;在实体类写了Data的注解&#xff0c;当调用实体类的get和set方法运行时&#xff0c;报错找不到相应的方法&#xff0c;但是在调用get、set方法的…...

单细胞Seurat的umi矩阵-与feature、counts(用于质控)

目录 关于umi矩阵学习 用umi计算feature、counts值 ①meta数据查看 ②Count和Feature计算(生成Seurat时自动计算) 1)提取UMI矩阵 2)计算 其他指标 评估质量指标(重点) 1)UMI计数 2)基因计数 3)UMIs vs. genes detected 4)线粒体计数比率 5)综合过滤 过…...

安防视频监控EasyCVR视频汇聚平台设备发送了GPS位置,但是订阅轨迹为空是什么原因?

安防视频监控EasyCVR视频汇聚平台兼容性强、支持灵活拓展&#xff0c;平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、GIS地图、轨迹跟踪、平台级联等视频能力。 用户描述&#xff0c;设备在电子地图中可以查看到定位信息&#xff…...

在 VueJS 中使用事件委托处理点击事件(事件委托,vue事件委托,什么是事件委托,什么是vue的事件委托)

前言 在开发 Vue 项目时&#xff0c;我们经常需要处理大量的点击事件。为每个可点击的元素单独添加事件监听器不仅会增加代码的复杂度&#xff0c;还会降低性能。事件委托是一种有效的优化方式&#xff0c;它可以显著减少事件监听器的数量&#xff0c;提高代码的可维护性和执行…...

密码学简史:时间密语

​ 注&#xff1a;机翻&#xff0c;未校。 A brief history of cryptography: Sending secret messages throughout time Stemming from the Greek words for “hidden writing,” cryptography is the practice of encrypting transmitted information so that it can only b…...

【Java数据结构】---初始数据结构

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 前言 从今天开始我们就要学习Java…...

MySQL--主从复制

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、什么是主从复制 1、定义 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&#xff1b;主数据库一…...

Linux RT调度器之负载均衡

RT调度类的调度策略是&#xff1a;保证TopN&#xff08;N为系统cpu个数&#xff09;优先级的任务可以优先获得cpu资源。除了在任务选核时通过基于cpu优先级的选核策略保证这一点外&#xff0c;还有其它流程&#xff0c;我们姑且将这部分流程称作RT调度器的负载均衡&#xff08;…...

pwn学习笔记(8)--初识Pwn沙箱

初识Pwn沙箱 ​ 沙箱机制&#xff0c;英文sandbox&#xff0c;是计算机领域的虚拟技术&#xff0c;常见于安全方向。一般说来&#xff0c;我们会将不受信任的软件放在沙箱中运行&#xff0c;一旦该软件有恶意行为&#xff0c;则禁止该程序的进一步运行&#xff0c;不会对真实系…...

Day18_2--Vue.js Ajax(使用 Axios)基础入门学习

Vue.js 中的 Ajax 请求&#xff08;使用 Axios&#xff09; 什么是 Axios&#xff1f; Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;可以用于浏览器和 Node.js 环境中。它是现代化的 Ajax 库&#xff0c;用来替代传统的 XMLHttpRequest。 为什么选择 Axios&#xf…...

windows11远程桌面如何打开

随着远程办公的普及&#xff0c;选择合适的远程桌面工具变得尤为重要。在Windows 11上&#xff0c;用户可以利用系统自带的远程桌面功能&#xff0c;或选择更专业的第三方解决方案&#xff0c;如Splashtop。本文将详细介绍如何在Windows 11上启用远程桌面&#xff0c;并对比Win…...

qt代码显示,包含文本颜色设置等

QScintilla 安装示例代码参考链接 安装 最近发现了一个有趣的库&#xff0c;qt的插件库&#xff0c;之前一直以为显示代码时是重写QTextEdit来实现的&#xff0c;结果qt有现成的一个库来显示这些东西&#xff0c;在此记录一下 # 安装 QScintilla pip install QScintilla示例代码…...

抽象代数精解【6】

文章目录 简单密码算法模运算数学定义置换移位代换仿射 参考文献 简单密码算法 模运算数学定义 模m剩余类集 Z m Z_m Zm​ 设∀a,b∈Z&#xff08;整数&#xff09;&#xff0c;m为正整数 m|b-a &#xff0c;称a R b R满足反身性、对称性、传递性 1、R为同余关系&#xff0c;…...

如何选择合适的PCB材料?FR4、陶瓷、还是金属基板?

选择合适的PCB材料对于电路板的性能、可靠性和成本至关重要。不同的PCB材料具有不同的特性&#xff0c;适用于不同的应用场景。 01 FR4&#xff08;玻璃纤维环氧树脂&#xff09; FR4的特点&#xff1a; 广泛应用&#xff1a;FR4是最常见的PCB基板材料&#xff0c;广泛应用…...

PXE学习及其简单应用

一、PXE 的定义 PXE 是一种基于网络的启动技术&#xff0c;最初由 Intel 开发&#xff0c;旨在提供一种在没有本地存储设备的情况下通过网络启动操作系统的标准。PXE 集成在计算机的 BIOS 或 UEFI 中&#xff0c;允许计算机从网络服务器下载并启动操作系统或其他软件。 二、PX…...

【Python】把list转换成json文件(list中为字典,元素按行写入)

0.前言 数据需要处理成与大模型输入相同类型的数据&#xff0c;从csv文件读出后&#xff0c;想要转换成json文件&#xff0c;看了好多资料都是把整个list写入了json&#xff0c;并不是我想要的格式&#xff0c;这里记录一下最后的按行写入的格式。 1.list转json import json …...

《机器人SLAM导航核心技术与实战》第1季:第8章_激光SLAM系统

视频讲解 【第1季】8.第8章_激光SLAM系统-视频讲解【第1季】8.1.第8章_激光SLAM系统_Gmapping算法-视频讲解【第1季】8.2.第8章_激光SLAM系统_Cartographer算法-视频讲解【第1季】8.3.第8章_激光SLAM系统_LOAM算法-视频讲解 第1季&#xff1a;第8章_激光SLAM系统 先 导 课第…...

【安当产品应用案例100集】005-安当ASP实现Exchange双因素登录认证

Exchange双因素登录通过增加额外的安全验证层&#xff0c;可以有效提高企业邮箱系统的安全性&#xff0c;减少了数据泄露和账号被盗的风险&#xff0c;同时也符合了日益严格的安全合规要求。 其必要性主要体现在以下几个方面&#xff1a; 提高安全性&#xff1a;传统的用户名…...

【Bug】Pytorch RuntimeError: DataLoader worker (pid(s) 15904) exited unexpectedly

【Bug1】RuntimeError: DataLoader worker (pid(s) 15904) exited unexpectedly 知乎&#xff1a;https://zhuanlan.zhihu.com/p/712407893 环境 Windows 11 Python 3.10 torch 2.0.1 numpy 1.25.0问题详情 在使用 PyTorch 的 DataLoader 时出现的错误。详情 RuntimeError:A…...

谈谈冯诺依曼体系

我们都知道冯诺依曼体系这张图最为代表性&#xff0c;而接下来我们就来浅谈一下各部分之间的作用~ 输入设备&#xff1a;键盘&#xff0c;磁盘&#xff0c;网卡&#xff0c;话筒等等 输出设备&#xff1a;磁盘&#xff0c;网卡&#xff0c;声卡&#xff0c;显示屏等等 这些硬件…...