首页 > 其他分享 >特殊矩阵的压缩存储

特殊矩阵的压缩存储

时间:2024-11-02 17:16:33浏览次数:7  
标签:优先 一维 压缩 元素 矩阵 存储 数组

一维数组的存储结构

ElemType arr[10];

各数组元素大小相同,且物理上连续存放。

 数组元素a[i]的存放地址 = LOC + i * sizeof(ElemType)。(LOC为起始地址)

二维数组的存储结构

ElemType b[2][4];

二维数组也具有随机存取的特性(需要明确是行优先还是列优先)。 

普通矩阵的存储

特殊矩阵的存储

对称矩阵的压缩存储

策略:只存储主对角线及下三角区(或上三角区)的元素。可以按行优先或列优先将各元素存入一维数组中。

重点即在于矩阵下标和一维数组下标的映射

按照行优先原则

 a_{i,j} (i\geqslant j)\rightarrow B[k]  考虑a_{i,j}是第几个元素,其前面有i-1 行,且第 k 行有k个元素,则前 i -1行共有[1+2+3+...+i-1]个元素,a_{i,j}是第i行第j个,则它是第\frac{i(i-1)}{2}+j个元素。由于数组的下标是从0开始的,因此k=\frac{i(i-1)}{2}+j-1

a_{i,j} (i< j)\rightarrow B[k],即在上三角区,由于是对称矩阵,所以a_{i,j}=a_{j,i},所以k=\frac{j(j-1)}{2}+i-1

按照列优先原则

 a_{i,j} (i\geqslant j)\rightarrow B[k]  考虑a_{i,j}是第几个元素,其前面有 j-1 列,且第 k 列有n-k+1个元素,则前 j -1列共有[n+n-1+...+n-(j-1)+1]个元素,a_{i,j}是第 j 列的 i-j+1个(从对角线开始数),则它是第\frac{(j-1)(2n-j+2)}{2}+i-j+1个元素。由于数组的下标是从0开始的,因此k=\frac{(j-1)(2n-j+2)}{2}+i-j

三角矩阵的压缩存储

策略:按行优先原则将上三角区(或下三角区)的元素存入一维数组中。

我们创建一个一维数组B[k],共有\frac{n(n+1)}{2}+1个元素,我们将上三角的相同元素c存在一维数组末尾。

下三角

上三角

三对角矩阵的压缩存储

三对角矩阵,又称带状矩阵,当|i-j|>1时,有a_{i,j}=0,(1\leq i,j\leq n)

策略:只存储带状部分,即当|i-j|≤1时的元素。按行优先(或列优先)原则存储。我们创建一个一维数组B[k],共有3n-2个元素。

按照行优先原则,考虑a_{i,j}是第几个元素,前i-1行有3(i-1)-1个元素,a_{i,j}是第i行的j-i+2个元素,所以a_{i,j}是第2i-j+2个元素,所以k=2i-j-3

稀疏矩阵的压缩存储

顺序存储

链式存储!!!

总结

标签:优先,一维,压缩,元素,矩阵,存储,数组
From: https://blog.csdn.net/weixin_74042627/article/details/143417458

相关文章

  • 状态压缩动态规划
    \(3^n\)枚举子集状压DP中相当重要的技巧(虽然后位有FWT,FMT替代,但不是都能代)for(inti=x;i;i=(i-1)&x){//i就是x的子集}题目P6622[省选联考2020A/B卷]信号传递看数据范围,\(m\le23\),且不同分数段增长很慢,表明会有\(O(2^m)\)的做法,考虑状压或搜索剪枝......
  • STM32 第21章 DMA--直接存储器访问
    时间:2024.10.31-11.2参考资料:《零死角玩转STM32》“DMA--直接存储器访问”章节编程部分的代码基于12-GPIO输出-使用固件库点亮LED灯一、学习内容1、DMA功能框图和DMA初始化结构体1.1DMA功能框图1.1.1DMA简介DMA:DataMemoryAccess,直接存储器访问。和GPIO、串口等一......
  • GaussDB Ustore存储引擎解读
    GaussDBUstore存储引擎解读GaussDB是华为云推出的一款高性能数据库产品,其内核新增的Ustore存储引擎为企业级用户提供了更高性能的数据库服务。Ustore存储引擎,又名In-placeUpdate存储引擎(原地更新),是GaussDB内核新增的一种存储模式,旨在解决传统AppendUpdate(追加更新)行存储......
  • 最大子矩阵和
    最大子矩阵和题目Leetcode:面试题17.24.最大子矩阵给定一个正整数、负整数和0组成的N×M矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组[r1,c1,r2,c2],其中r1,c1分别代表子矩阵左上角的行号和列号,r2,c2分别代表右下角的行号和列号。若有多个满足条件的......
  • 链栈存储学生信息三级引用
    链栈,自己实现一遍,但是节点存储不是整数,存储学生信息(年龄,分数,姓名)三级引用。1、建立学生信息结构体,将data改为学生信息结构体类型。2、循环入栈和出栈。#include<myhead.h>typedefstructstudent{ intage; floatscore; charname[20];}stu;typedefstructnode{......
  • 实验7-2-3 求矩阵的局部极大值
     ......
  • uniapp 图片体积太大,压缩文件
    functioncompressImage(file,maxWidth,maxHeight,quality,callback){//创建FileReader读取文件letreader=newFileReader();reader.readAsDataURL(file);reader.onload=e=>{letimg=newImage();img.src=e.target.result;......
  • 存储服务nfs
    1.概述存储:用于存放用户上传的内容(数据),一般应用在网站集群中.为何用?如果不使用存储,用户上传的数据就直接存放在网站服务器上了,用户下次访问就可能找不到.如果使用存储,用户上传的内容存放在存储上面,用户访问就会访问存储.位置:网站后排.2.存储选型⭐⭐⭐......
  • juicefs元数据存储方式
    环境文件系统使用juicefs,元数据存储使用postgresql,数据存储使用minio问题?通过juicefs写入一个文件,元数据在postgresql中是如何存储的?数据在minio中又是如何存储的?使用docker部署完测试环境后,新建file1、dir1/file1、dir1/file2三个文件在postgresql中jfs_chunk表中记录着文......
  • C++之OpenCV入门到提高003:矩阵的掩膜(Mask)处理
    一、介绍今天是这个系列《C++之Opencv入门到提高》得第三篇文章。今天这篇文章也不难,主要介绍如何使用Opencv对图像进行掩膜处理,提高图像的对比度。在这个过程中,我们可以学到如何获取图像指针、如何处理像素值越界等问题。我们一步一个脚印的走,收获就会越来越多。虽然......