数据结构-上三角矩阵存储方式[0知识掌握]

目标:看完本文章你将会了解上三角矩阵的存储方式以及矩阵中数据的位置索引号如何求

难点:上三角矩阵的公式推导,上三角任意位置对应的存储位置。

一、准备知识

1.求和公式

前n项和:Sn = n(a1+an)/2

公差:d=后项-前项

项次:有多少个数需要求和,能表示出项次即可,矩阵中可能n表示项次,也可能n-1,或i-1只是形式不同而已。项次是比较核心,注意结合后续矩阵理解它的定位。

an项如何求:an=a1+(n-1)d, 这是求n项实际对应具体的数据,使用该公式即可。

2.内存存储地址如何编号

内存地址以1个字节为单位,1个字节8位,对应一个地址。比如int a = 8; 实际占用4个字节,即有4个地址,如果取a地址,&a取到的只是首地址,知道首地址,那么结束在什么地方,即根据int计算,int占用4个字节,如果首地址是2001,那么2001-2004位该整型的存储空,实际可使用的地址只是2001,其它三个地址被int屏蔽为不可见,如果非要去取2002能取到吗,直接用指针+1是无法获取到的。因为+1,实际到2005, 感兴趣的可以思考,如何去取2002,此处不讨论这个。

二、上三角矩阵

对角线上半部分是不同的数据,对角线下半部分数据相同所以用一个存储空间存储即可。

(一)数据存储:使用顺序存储,将该矩阵数据存储一维数组中,可以用静态分配或动态分配。

静态分配:比如矩阵中都是int, 声明数组int Sm; 数组大小m=矩阵中的所有数据,

矩阵上半部分数据:n,n-1,n-2,n-3,.... 1, 使用求和公式 n(n+1)/2 得出总的数据量

矩阵下半部分:1个

总数的数据:m=n(n+1)/2+1, 上半部分数据量+下半部分数据量。m=11

动态分配:实际上一样,即int *S = (int *)malloc(m*sizeof(int)). m=11。

本例使用静态分配,分配完成后,这样即获得了内存的空间,以行序方式进行矩阵的存储。

分配后的对应关系如下

数据: a11 a12 a13 a14 a22 a23 a24 a33 a34 a44 C ....n

索引: 0 1 2 3 4 5 6 7 8 9 10....m

现在想知道a44的存储索引,如何计算。

1.要知道a44的位置,需要知道a44前面有多少数据,可以观察他们的关系是

n,n-1,n-2... a44, 比如a44是i行,那么去除a44本身求和即求n,n-1,n-2,......i-1的和,

注意为什么是i-1,i-1表示的是矩阵中项次对应的数据,实际可以理解成是只知道项次而不知道具体对应的数值,是需要求出来的,如果求出了i-1项次对应的实际数据,那么a44前n项和就很简单了,可根据公式am=a1+(m-1)d求值,通过观察公差d是-1,a1是n,m=i-1项次, 得出ai-1=n+(i-1-1)*-1=n-i+2;

所以i-1项次的数据就是n-i+2;a1=n,知道首项、末项、项次,直接带入求和公式

(i-1)(n+n-i+2)/2 =(i-1)(2n-i+2)/2,此时项次i-1=a44的前n项和或者说前面有多少元素就算出来了。后面在加上j-i+1,即可算出当前a44所在的位置。

存储位置或即下标索引k=(i-1)(2n-i+2)/2+j-i+1 = 10,因为数组下标是从0开始所以在-1实际是k=9

相关推荐
致远ccc20 小时前
无人直播和真人直播有什么区别?如何用 DuoPlus 云手机搭建直播矩阵?
矩阵·无人直播·tiktok·云手机
张欣-男1 天前
5分钟理解线性代数v2
人工智能·线性代数·机器学习
张欣-男1 天前
3分钟理解线性代数
线性代数·算法
段一凡-华北理工大学1 天前
高炉智能布料技术与炉料分布优化~系列文章03:布料矩阵解码:环位、角度、圈数与料流的量化控制
java·网络·人工智能·矩阵·高炉智能化·高炉布料矩阵优化·高炉智能布料技术
智购无人售货机厂家2 天前
2026自动售货机软硬件版本管理策略:从版本号规范到兼容性矩阵的工程实践~YH
运维·服务器·人工智能·单片机·嵌入式硬件·线性代数·矩阵
龙泽金2 天前
矩阵论简介与工程应用
数学建模·矩阵·自动控制
独立开发之道3 天前
【three.js教程】Three.js 运行时更新:矩阵、几何体、材质怎么改才不卡
javascript·矩阵·材质
船厂电气自动化ai大模型3 天前
AI大模型与数学/第63课:矩阵定义、矩阵加法、标量乘法(逐级精讲)
数据结构·人工智能·深度学习·线性代数·算法
张宇Joaquin3 天前
鲲鹏统一并行加速库KUPL--异步数据拷贝
线性代数·算法·矩阵·numpy
独立开发之道3 天前
【three.js教程】Three.js 矩阵变换:position/quaternion/scale 和 matrix 到底怎么配合
开发语言·javascript·矩阵