特殊矩阵的压缩存储(对称矩阵,三角矩阵,三对角矩阵,稀疏矩阵)
目录
- 1.数组的存储结构
- 1.—维数组
- 2.二维数组
- 1.行优先存储
- 2.列优先存储
- 2.特殊矩阵
- 1.对称矩阵
- 1.行优先存储
- 2.三角矩阵
- 1.上三角矩阵
- 2.下三角矩阵
- 3.三对角矩阵(带状矩阵)
- 4.稀疏矩阵
1.数组的存储结构
1.—维数组
各数组元素大小相同,且物理上连续存放。
数组元素a[i]的存放地址= 起始地址 L O C + i ∗ s i z e o f ( E l e m T y p e ) ( 0 < i < 10 ) 起始地址LOC+i * sizeof(ElemType)(0<i<10) 起始地址LOC+i∗sizeof(ElemType)(0<i<10)
2.二维数组
1.行优先存储
M行N列的二维数组b[M][N]中,若按
行优先存储,
则b[i][j]的存储地址= L O C + ( i ∗ N + j ) ∗ s i z e o f ( E l e m T y p e ) LOC + (i*N+ j) * sizeof(ElemType) LOC+(i∗N+j)∗sizeof(ElemType)
2.列优先存储
M行N列的二维数组b[M][N]中,若按
列优先存储,
则b[i][i]的存储地址= L O C + ( j ∗ M + i ) ∗ s i z e o f ( E l e m T y p e ) LOC+ ( j*M+i ) * sizeof(ElemType) LOC+(j∗M+i)∗sizeof(ElemType)
2.特殊矩阵
1.对称矩阵
若n阶
方阵中任意一个元素aij,都有 a i j = a j i aij=aji aij=aji则该矩阵为对称矩阵。
压缩存储策略:只存储主对角线+下三角区(或主对角线+上三角区)
1.行优先存储
1.下三角区
策略:只存储主对角线+下三角区。
①存储的数组长度: ( 1 + n ) ∗ n / 2 (1+n)*n/2 (1+n)∗n/2
②矩阵下标 a i j aij aij与一维数组下标k的映射关系: k = i ( i − 1 ) 2 + j − 1 , i > = j k=\frac{i(i-1)}{2}+j-1,i>=j k=2i(i−1)+j−1,i>=j
2.上三角区
根据对称矩阵的性质: a i j = a j i aij = aji aij=aji:
k = j ( j − 1 ) 2 + i − 1 , i < j k=\frac{j(j-1)}{2}+i-1,i<j k=2j(j−1)+i−1,i<j
2.三角矩阵
压缩存储策略:按
行优先原则将橙色区元素存入一维数组中。并在最后一个位置存储常量c。
1.上三角矩阵
除了主对角线和上三角区,其余的元素都相同。
按照行优先的原则,映射关系: k = ( i − 1 ) ( 2 n − i + 2 ) 2 + j − i , i < = j ( 上三角区和主对角线元素 ) k=\frac{(i-1)(2n-i+2)}{2}+j-i,i<=j(上三角区和主对角线元素) k=2(i−1)(2n−i+2)+j−i,i<=j(上三角区和主对角线元素)
k = n ( n + 1 ) 2 , i > j ( 下三角区元素 ) k = \frac{n(n+1)}{2},i>j(下三角区元素) k=2n(n+1),i>j(下三角区元素)
2.下三角矩阵
除了主对角线和下三角区,其余的元素都相同。
按照行优先的原则,映射关系: k = i ( i − 1 ) 2 + j − 1 , i > = j ( 下三角区和主对角线元素 ) k=\frac{i(i-1)}{2}+j-1,i>=j(下三角区和主对角线元素) k=2i(i−1)+j−1,i>=j(下三角区和主对角线元素)
k = n ( n + 1 ) 2 , i < j ( 上三角区元素 ) k = \frac{n(n+1)}{2},i<j(上三角区元素) k=2n(n+1),i<j(上三角区元素)

3.三对角矩阵(带状矩阵)
三对角矩阵,又称
带状矩阵: 当 ∣ i − j ∣ > 1 时,有 a i j = 0 ( 1 < = i , j ≤ n ) 当|i -j|>1时,有aij=0 (1<=i, j ≤n) 当∣i−j∣>1时,有aij=0(1<=i,j≤n)
压缩存储策略:按行优先((或列优先)原则,只存储带状部分。
①已知aij求数组下标k:
前i-1行共 3 ( i − 1 ) − 1 3(i-1)-1 3(i−1)−1个元素
aij是i行第 j − i + 2 j-i+2 j−i+2个元素
aij是第 2 i + j − 2 2i+j-2 2i+j−2个元素
k = 2 i + j − 3 k=2i+j-3 k=2i+j−3(数组下标从0开始)
②若已知数组下标k,如何得到i,j?
即第k+1个元素:
i = 「 ( k + 2 ) / 3 ] i =「(k+2)/3] i=「(k+2)/3](向上取整)
由 k = 2 i + j − 3 k=2i+j-3 k=2i+j−3得,
j = k − 2 i + 3 j=k-2i+3 j=k−2i+3

4.稀疏矩阵
稀疏矩阵:非零元素远远少于矩阵元素的个数。
压缩存储策略:
①顺序存储:三元组<行,列,值>,会失去随机存储的特性。
例如:
对应的三元组为:
②链式存储:十字链表法
结点说明:
相关文章:
特殊矩阵的压缩存储(对称矩阵,三角矩阵,三对角矩阵,稀疏矩阵)
目录 1.数组的存储结构1.—维数组2.二维数组1.行优先存储2.列优先存储 2.特殊矩阵1.对称矩阵1.行优先存储 2.三角矩阵1.上三角矩阵2.下三角矩阵 3.三对角矩阵(带状矩阵)4.稀疏矩阵 1.数组的存储结构 1.—维数组 各数组元素大小相同,且物理上…...
DDU框架学习之路
目录 MVVM对比 DDU 数据消费者UI 数据的转换者:Domain Layer 数据图生产者/提供者 DataLayer 遵循原理: 单一数据流: Android官方推荐架构:DDU MVVM对比 M:Model 网络层 用于获取远端数据 VM:ViewModel 中间转…...
进阶课6——基于Seq2Seq的开放域生成型聊天机器人的设计和开发流程
情感聊天机器人通常属于开放领域,用户可以与机器人进行各种话题的互动。例如,微软小冰和早期的AnswerBus就是这种类型的聊天机器人。基于检索的开放领域聊天机器人需要大量的语料数据,其开发流程与基于任务型的聊天机器人相似,而基…...
Java面试题04
1.Array 和 ArrayList 有何区别? Array是固定长度的,元素类型可以是基本类型,创建后大小不可改变;ArrayList是可变长 度的,只能存储对象,可以动态添加和删除元素。 区别1: 存储类型不同 …...
海康Visionmaster-通讯管理:使用 Modbus TCP 通讯 协议与流程交互
使用 Modbus TCP 通讯协议与视觉通讯,当地址为 0000 的保持型寄存器(4x 寄存器)变为 1 时,触发视觉流程执行一次,同时视觉将地址为 0000 的寄存器复位(也即写为 0),视觉流程执行完成后,将结果数…...
assimp中如何判断矩阵是否是单位矩阵
对于一个矩阵元素为浮点型的矩阵,你是否还在使每个元素跟1.0f或0.0f进行比较,如果这样,只能说你的结果不一定正确,那我们看看assimp中是如何做的。 template <typename TReal> AI_FORCE_INLINE bool aiMatrix4x4t<TReal…...
大数据Doris(二十):数据导入(Broker Load)介绍
文章目录 数据导入(Broker Load)介绍 一、适用场景...
Docker快速安装kafka
创建zk docker run -d --name zookeeper-server \-e ALLOW_ANONYMOUS_LOGINyes \bitnami/zookeeper:latest创建kafka docker run -d --name kafka-server \-p 9092:9092 \-e ALLOW_PLAINTEXT_LISTENERyes \-e KAFKA_CFG_ZOOKEEPER_CONNECTzookeeper-server:2181 \-e KAFKA_CF…...
ChatGPT是什么?黑客试图淹没其服务
上线2个月,月活跃用户破亿,媒体人用它编辑文案,学生用它写作业,程序员用它编辑代码, 它是谁呢? 它就是火爆全网(chatgpt),chatgpt是什么呢,chatgpt是美国研发的一款人工…...
【Java 进阶篇】Java Web 开发之 Listener 篇:ServletContextListener 使用详解
欢迎大家来到 Java Web 开发的学习之旅!在前面的博客中,我们已经学习了 Servlet、JSP、Filter 等重要的概念和技术。今天,我们将深入探讨 Java Web 开发中另一个重要的组成部分——Listener(监听器),具体来…...
[C/C++]数据结构 链表OJ题:环形链表(如何判断链表是否有环)
题目描述: 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&…...
c#流程控制
c#分支语句 namespace ConsoleApp1 {internal class Program{static void Main(string[] args){Console.WriteLine("请输入学生成绩");string sConsole.ReadLine();int aint.Parse(s);//将字符类型强制转换为int类型if (a > 90){ Console.WriteLine("成绩优…...
基于SSM的学生二手书籍交易平台的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
xcode-工程设置
build settings Deployment Postprocessing 用于指定是否在构建完成后进行一些部署相关的处理。 当你在 Xcode 中构建你的应用程序时,构建设置决定了一些行为,其中一项是是否启用 Deployment Postprocessing。这个选项的主要作用是在构建完成后&#…...
Milvus Cloud——LLM Agent 现阶段出现的问题
LLM Agent 现阶段出现的问题 由于一些 LLM(GPT-4)带来了惊人的自然语言理解和生成能力,并且能处理非常复杂的任务,一度让 LLM Agent 成为满足人们对科幻电影所有憧憬的最终答案。但是在实际使用过程中,大家逐渐发现了通…...
百度智能云千帆大模型平台再升级,SDK版本开源发布!
SDK 前言一、SDK的优势二、千帆SDK:快速落地LLM应用三、如何快速上手千帆SDK1、SDK快速启动快速安装平台鉴权如何获取AK/SK以“Chat 对话”为调用示例 2. SDK进阶指引3. 通过Langchain接入千帆SDK为什么选择Langchain 开源社区 前言 百度智能云千帆大模型平台再次升…...
按键精灵中的数据类型转换
按键精灵中的数据类型有:整型、浮点数、布尔类型、字符串、数组这几种类型,主要的转换方式有以下这几种方式: 1. 转布尔类型 CBool Dim A 5 Dim B CBool(A)TracePrint B // true 2. 转字符串类型 CStr Dim MyInteger 437Dim MyStr…...
Golang Gorm 连接数据库
连接数据库 为了连接数据库,你首先要导入数据库驱动程序。例如: import _ "github.com/go-sql-driver/mysql"import ("gorm.io/driver/mysql""gorm.io/gorm" ) GORM 已经包含了一些驱动程序,为了方便的去记住…...
[C++随笔录] 红黑树
红黑树 红黑树的特点红黑树的模拟实现红黑树的底层结构insert的实现实现思路更新黑红比例的逻辑insert的完整代码 insert的验证 源码 红黑树的特点 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是 Red或 Black。…...
C 和 C++ 可变参数介绍
文章目录 前言概念C 的可变参数参数列表 #va_list 4组宏 C 的可变参数参数列表 #va_list 4组宏初始化列表 initializer_list<> 类模板可变参数模板 总结参考资料作者的话 前言 C 和 C 可变参数介绍。 概念 可变(长)/不定(长ÿ…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...




