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

特殊矩阵的压缩存储(对称矩阵,三角矩阵,三对角矩阵,稀疏矩阵)

目录

  • 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+isizeof(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+(iN+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+(jM+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(i1)+j1,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(j1)+i1,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(i1)(2ni+2)+jii<=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(i1)+j1i>=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) ij>1时,有aij=0(1<=i,jn)
压缩存储策略:按行优先((或列优先)原则,只存储带状部分。
①已知aij求数组下标k:
前i-1行共 3 ( i − 1 ) − 1 3(i-1)-1 3(i1)1个元素
aij是i行第 j − i + 2 j-i+2 ji+2个元素
aij是第 2 i + j − 2 2i+j-2 2i+j2个元素
k = 2 i + j − 3 k=2i+j-3 k=2i+j3(数组下标从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+j3得,
j = k − 2 i + 3 j=k-2i+3 j=k2i+3

在这里插入图片描述

4.稀疏矩阵

稀疏矩阵:非零元素远远少于矩阵元素的个数。
压缩存储策略:
①顺序存储:三元组<行,列,值>,会失去随机存储的特性。
例如:
在这里插入图片描述
对应的三元组为:
在这里插入图片描述

②链式存储:十字链表法
结点说明:
在这里插入图片描述
在这里插入图片描述

相关文章:

  • vue中数据代理和事件处理
  • 微服务架构下如何使用多环境多服务联合调试
  • 基于GCC的工具objdump实现反汇编
  • 禅道项目信息通知到钉钉群配置步骤
  • 1438 绝对差不超过限制的最长连续子数组(单调队列)
  • SQL触发器
  • Hadoop架构、Hive相关知识点及Hive执行流程
  • 个人app编程的好处及条件
  • CSS知识点梳理(一)
  • element ui中Select 选择器,自定义显示内容
  • Word2Vec的缺点
  • 将 ONLYOFFICE 文档编辑器与 С# 群件平台集成
  • Python开源项目RestoreFormer(++)——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践
  • Debian 9 Stretch APT问题
  • 接口测试及常用接口测试工具
  • .pyc 想到的一些问题
  • __proto__ 和 prototype的关系
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Apache的基本使用
  • ES10 特性的完整指南
  • Java IO学习笔记一
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Laravel5.4 Queues队列学习
  • linux安装openssl、swoole等扩展的具体步骤
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 一天一个设计模式之JS实现——适配器模式
  • 译有关态射的一切
  • 在Mac OS X上安装 Ruby运行环境
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Ruby)Ubuntu12.04安装Rails环境
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)我也是一只IT小小鸟
  • .describe() python_Python-Win32com-Excel
  • .NET CLR Hosting 简介
  • .NET Core中的去虚
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net操作Excel出错解决
  • @AutoConfigurationPackage的使用
  • @property @synthesize @dynamic 及相关属性作用探究
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C++]类和对象(中)
  • [ios] IOS文件操作的两种方式:NSFileManager操作和流操作【转】
  • [J2ME]url请求返回参数非法(java.lang.illegalArgument)
  • [Linux] Linux入门必备的基本指令(不全你打我)
  • [NSSCTF 2nd] web刷题记录