特殊矩阵的压缩存储(上)

特殊矩阵的压缩存储 特殊矩阵的主要形式有:(1)对称矩阵(2)上三角矩阵/下三角矩阵(3)对角矩阵它们都是方阵,即行数和列数相同。一、对称矩阵的压缩存储     若一个n阶方阵A[n][n]中的元素满足a i,j=a j,i(0≤i,j≤n-1),则称其为n阶对称矩阵。由于对称矩阵中的元素关于主对角线对称,因此在存储时可只存储对称矩阵中上三角或下三角中的元素,使得对称的元素共享一个存储空间。这样,就可以将n2个元素压... 阅读详情

概述:主要是推导出上/下三角矩阵、对称矩阵存储在一维数组中的方法
a.下三角矩阵
    一个n×n阶矩阵,i为行下标,j为列下标,i>=j的部分构成的三角矩阵,称为下三角矩阵,形式如下:
    
   

 a[0,0]
 a[1,0]  a[1,1]
 a[2,0]  a[2,1]  a[2,2]

     存储一个矩阵最直观的就是用二维数组存储,如果用一维数组存储的话,就会有一个下标转换的问题,下三角矩阵转化为一维数组时,一维数组下标和矩阵元素的对应关系如下:
    
   

array[0]
array[1]  array[2]
array[3]  array[4]  array[5]


    
    很容易可以发现,在每一行中,第一个以后的下标都是第一个下标加上对应矩阵的列下标,如第三行第一个下标为3,第三行第三列对应的矩阵列下标为2,所以第三行第三列的下标为3+2=5;每一行第一个下标取值则取决于前面所有行的元素个数总和,可以发现,每一行包含的元素个数是一个等差数列,所以下标为i的行(第i+1行),前面的元素共有 ((1+i)*i)/2 个,也就是下标为i的行,其第一个下标为 ((1+i)*i)/2,所以得到下三角矩阵用一维数组存储时,矩阵下标i、j和一维数组下标k的对应关系如下:
    
            k = ((1+i)*i)/2+j   (i>=j)
    
    这个公式的含义是:在下三角矩阵中,a[i,j]位置对应的值存储在array[k]中
    
b.上三角矩阵
    一个n×n阶矩阵,i为行下标,j为列下标,i=<j的部分构成的三角矩阵,称为下三角矩阵,形式如下:
  

 a[0,0]  a[0,1]  a[0,2]
         a[1,1]  a[1,2]
                 a[2,2]

    
    上三角矩阵转化为一维数组时,一维数组下标和矩阵元素的对应关系如下:
   

array[0]  array[1]  array[2]
          array[3]  array[4]
                    array[5]

    类似下三角矩阵,上三角矩阵中,下标为i的行,第一个以后的下标都是第一个下标加上对应矩阵的(列下标-行下标),如第二行第一个下标为3,第二行第三列对应的矩阵列下标为2,行下标为1,所以第二行第三列的下标为3+(2-1)=4;每一行第一个下标取值则取决于前面所有行的元素个数总和,同样是一个等差数列,所以下标为i的行(第i+1行),前面的元素共有 ((n+n-(i-1))*i)/2 = ((2n-i+1)*i)/2 个,也就是下标为i的行,其第一个下标为 ((2n-i+1)*i)/2,所以得到上三角矩阵用一维数组存储时,矩阵下标i、j和一维数组下标k的对应关系如下:
    
            k = ((2n-i+1)*i)/2+j-i   (i<=j)
    
    含义同上:在上三角矩阵中,a[i,j]位置对应的值存储在array[k]中
    
c.对称矩阵
    对称矩阵是指矩阵元素满足 a[i,j]=a[j,i] 的矩阵。
    
    在进行压缩存储时,可以只存储主对角线和上/下部分元素,一个n阶矩阵,只需要 n(n+1)/2 个存储单元。为了方便,我们采用存储主对角线和下半部分的方式(即存储下三角矩阵),其中下半部分,一维数组下标和矩阵下标的对应关系和下三角矩阵一样;上半部分,由于 a[i,j]=a[j,i] 所以只需要把i和j互换即可,得到的矩阵下标i、j和一维数组下标k的对应关系如下:
    
            k = ((1+i)*i)/2+j   (i>=j)
            k = ((1+j)*j)/2+i   (i<j)
    
    含义同上:在对称矩阵中,a[i,j]位置对应的值存储在array[k]中
    
d.对角矩阵
    如果一个矩阵的所有非零元素都集中在以主对角线为中心的带状区域,该矩阵就称为对角矩阵。
    
    这里主要讨论主对角矩阵和三对角矩阵。一个矩阵除了主对角线上的元素外,其余元素全部为0,则为主对角矩阵;除了主对角线及主对角线上下各一个元素外,其余元素全部为0,则为三对角矩阵。
    
    对于主对角矩阵,矩阵下标i、j和一维数组下标k的对应关系很简单:
    
            k=i 或 k=j
    
    对于三对角矩阵,除了第一行和最后一行是两个元素,其它行都是三个元素,所以下标为i(i>0)的行,前面行的元素共有 3*i-1 个,该行第一个元素前面有 i-1 个元素不属于这三条对角线,所以对于三对角矩阵,矩阵下标i、j和一维数组下标k的对应关系如下:
    
            k = (3*i-1)+(j-(i-1)) = 2*i+j
    
    对于任意m对角矩阵,其矩阵下标i、j和一维数组小标k的对应关系比较复杂,这里不再讨论。有兴趣的可以阅读下面的论文:
    m条对角线的n阶对角矩阵压缩存储的通用寻址公式

矩阵压缩存储(对称,三角,对角,稀疏) 利用一维数组对各种特殊矩阵进行储存的方法,以及实现稀疏矩阵顺序存储的完整代码和测试用例 阅读详情

相关推荐

上三角矩阵储存为一维数组

压缩矩阵  ,将矩阵存储为一维矩阵,同时可以解压缩  其实题目记不太清了 。。。。刚刚开始做这道题的时候 ,我是用n*n矩阵来储存数据 ,然后定义了一个压缩方法和解压方法,交完作业老师说,这道题的原意不是这样。。。。。。你应该是用一个一维数组存储数据,这样才能达到节省空间的目的,然后输出的时候显示式n*n的矩阵。。。。然后我又重新改了,以下是我的答案,如有错误,添加微信macforyou1

yutong5818的博客 8819

《数据结构》习题2

一、单项选择题 以下数据结构中___属非线性结构。 A.栈 B.串 C.队列 D.平衡二叉树 以下算法的时间复杂度为___。 void func(int n) { int i=0,s=0; while (s<=n) { i++; s=s+i; } } A. O(n) B. O( ) C. O(nlog2n) D. O(log2n) 在一个双链表中,删除p所指节点(非首、尾节点)的操作是___。 A.p->prior-&

Miss Z的博客 3878

【考研】数据结构——特殊矩阵的压缩存储(含真题)

本文内容源于对《数据结构(C语言版)》(第2版)、王道讲解学习所得心得、笔记整理和总结。本文主要以举例子的方式讲解考研选择题型中的特殊矩阵的压缩存储知识点,配以图文(含408真题)。【2023考研】数据结构常考应用典型例题(含真题)_住在阳光的心里的博客-优快云博客。

qq_34438969的博客 7142

【数据结构】特殊矩阵的压缩存储

💯矩阵的压缩存储:特殊矩阵有对称矩阵,三角矩阵,三对角矩阵,稀疏矩阵,数组是由n个相同类型的数据元素所构成的有限序列数组是线性表的推广:一维数组可以看做是一个线性表,而对于二维数组而言,可以看成是有多个线性表组成的线性表也就是每一行列视都为一个线性表,总的线性表内每一个元素也是一个定长的线性表。

DAY I 的成长之路 4456

特殊矩阵的压缩存储(详细版 通俗易懂 含c语言稀疏矩阵十字链表代码 )

前言 此文章是本人第一篇博客,目的在于巩固过去所学的知识,同时可能会给大家带来一丝丝帮助,但由于没有经验加上本人能力极其有限,文章中可能存在不足之处,还请读者能够指正(`・ω・´)。 这篇文章首先会介绍矩阵压缩存储和特殊矩阵的基本概念,然后将会比较详细地说明几种特殊的矩阵:对称矩阵、三角矩阵、带状矩阵(三对角矩阵)、稀疏矩阵的压缩存储的策略,包括定量计算和十字链表的c语言代码,让我们开始吧! 注意,本文所用数组下标均为从0开始 正文 一.基本概念 压缩存储 在一个矩阵中,若多个数据的值相同,为

亿维数组's博客 5737

C++数组应用之特殊矩阵的压缩存储

 矩阵:                  矩阵是数值程序设计中经常用到的数学模型,它是由 m 行和 n 列的数值构成(m=n 时称为方阵)。在用高级语言编制的程序中,通常用二维数组表示矩阵,它使矩阵中的每个元素都可在二维数组中找到相对应的存储位置。然而在数值分析的计算中经常出现一些有下列特性的高阶矩阵,即矩阵中有很多值相同的元或零值元,为了节省存储空间,需要对它们进行"压缩存储",即不存或少

贝高林的Blog 8575

特殊矩阵的压缩存储(公式详解)

在数据结构中需要考虑如何将矩阵更有效地存储在内存中,并能方便地提取矩阵中的元素。本文分析了如何将对称矩阵、三角矩阵以及三对角矩阵压缩至一维数组中,并对部分公式进行了分析和推导。

kusunoki的博客 4886

从AP到ADSP:高通8650 AudioReach中GSL-Passthru-GPR的数据通路剖析

本文深入剖析了高通骁龙8650平台AudioReach架构中,音频数据从应用处理器(AP)到音频数字信号处理器(ADSP)的完整传输路径。重点解析了GSL(Graph Service Layer)如何封装命令,并通过Passthru驱动与GPR(Generic Packet Router)协同工作,实现跨处理器的高效、异步数据交换,揭示了现代手机复杂音频系统背后的核心通信机制。

cherry的博客 536

【数据结构】特殊矩阵的压缩存储|保姆级详解+图解

在线性代数这门学科中已经学习了矩阵。在高级计算机语言中,矩阵常用二维数组表示。所谓**“压缩存储”**,目的在于节省空间!体现在,为多个值相同的元素只分配一个存储空间,多元素值为0的元素不分配空间二维数组A[n][n]和的写法是等价的。如果数组写法为,则说明指定了下标是从1开始存储元素。二维数组元素写为a[i][j],注意数组元素下标i和j通常是从0开始的。矩阵元素通常写为a i,j或者a(i),(j),注意这时的i和j代表的行号和列号,都是从1开始的!这里我们讨论两种特殊矩阵。

Yaoyao2024的博客 9638

JasperReport制作行内容合并的表格

效果图: 实现思路一: 交叉表 另一个思路: 普通表格 缺点:无法实现内容 垂直居中显示 准备工作 一、数据准备 DROP TABLE IF EXISTS `address_item_sex_value`; CREATE TABLE `address_item_sex_value` ( `id` int(11) NOT NULL AUTO_INCREM...

weixin_34148456的博客 2468

IAR9.4报错之编码方式

IAR9.40编码方式错误导致的报错

qq_36081075的博客 2626

【数据结构】特殊矩阵的压缩存储——对称矩阵、三角矩阵、稀疏矩阵……

【数据结构】第三章——栈、队列与数组 详细介绍特殊矩阵在内存中的压缩存储……

蒙奇D索大的博客 1919

新手3dslicer手动肝脏切割及体积测量(详细图文)

刚接手软件的时候,我一直想用自动分割工具,试验了Med sam,依赖安装不了;试验了英伟达的AI,NvidiaAIAssis,传服务器根本没反应,所有只有用了手动切割。不要求所有层面勾画,但是最好是典型层面都勾画一下,特别是有毗邻脏器密度相近的层面。点击3D后可能三维窗口未显示,可以调整一下窗口大小,有可能显示在我们看见的范围之外。早就准备更新这篇了,由于懒癌发作,一直早葛优躺,今天刚好有点时间,就简单写下来。

linjianping513的博客 5928

【数据结构】特别篇:特殊矩阵的压缩存储

前面共存储有 1 + 2 + 3 + 4 + 5 + 6 + 1 = 22 个元素 ( 数组下标范围为0 ~ 21 ),注意数组下标从 0 开始,故。n(n+1)/2+1] 中,则存放到 B[k] 中的非零元素。+ (n - j + 2) = (j-1)(2n - j + 2) / 2 个元素,,矩阵 M 的第一行有 12 元素,第二行有 11 个,第三行有 10 个,第四行有 9 个,第五行有 8 个,所以。共有 1 + 2 + 3 + …n(n+1)/2+1] 中, 则存放到B[k] 中的非零元素。

关注:https://github.com/Suhan42 1747

Transformers在自动驾驶领域的应用(High-level like in scene)

Transformers uses global attention mechanism to capture long-range interaction information. Two core modules in Transformers are Self-Attention and Cross-Attention, which defined asAttn(Q,K,V)=softmax(QK⊤dk)VSelfAttn(X)=Attn(WQX,WKX,WVX)CrossAttn(X,Y)=Attn

qq_39337332的博客 1776

手把手教你学pcie--用Verilog搭建PCIe控制器核心模块

PCIe控制器是硬件设计的核心模块,负责实现设备与主机之间的高速通信。本文将以Verilog语言为例,分步骤讲解如何从零构建一个简化的PCIe控制器核心模块,涵盖事务层(TLP)生成、数据链路层(DLLP)处理和物理层(PHY)接口适配。目标是为嵌入式开发者、FPGA工程师提供一个可扩展的硬件设计框架。​。

MHD0815的博客 340
上一篇: KMP模式匹配算法
下一篇: 特殊矩阵的压缩存储(下)
java_t_t
博客等级 码龄9年 171粉丝 107原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值