数据结构-上三角矩阵存储方式[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 S[m];  数组大小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

      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SASS 目录结构

SASS 目录结构的管理 对于大型项目来说,前端的页面很多,如果不能很好的管理 SASS 的目录结构或者架构,后续的维护可能会非常困难。SASS 7-1 是官方的一个最佳实践,就是将 SASS 文件按照不同的类别放入不同目录中,包括…

【JavaEE多线程】线程安全、锁机制及线程间通信

目录 线程安全线程安全问题的原因 synchronized 关键字-监视器锁monitor locksynchronized的特性互斥刷新内存可重入 synchronized使用范例 volatilevolatile能保证内存可见性volatile不保证原子性synchronized 也能保证内存可见性 wait 和 notifywait()方法notify()方法notify…

开发语言漫谈-JavaScript

JavaScript、Java名字很相近,但它们没有任何亲缘关系,是由不同公司开发的编程语言。Java由Sun公司(后被Oracle收购)开发,JavaScript最初是由Netscape公司开发的(当年浏览器的霸主)。JavaScrip…

PostgreSQL恢复系列:pg_filedump恢复字典构造---惜分飞

pg_filedump是在pg数据库极端情况下直接解析数据库文件的利器,但是由于是开源软件,本身难以实现批量处理,通过对底层基表分析,可以实现批量处理功能分析PostgreSQL库中数据库信息 --数据库查询结果 postgres# select oid,datname,datdba,dattablespace from pg_database; oid…

leetcode--3 无重复最长字串

题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 …

PyTorch torch.nn.functional.one_hot用法解析

1.用法 在PyTorch中,我们可以使用torch.nn.functional.one_hot函数来实现One-Hot编码。下面是一个简单的例子: import torch import torch.nn.functional as F # 假设我们有一个包含类别标签的张量 labels torch.tensor([0, 2, 1, 0, 2]) # 使用torch…

深度学习概念

AIGC数据生产: AIGC在生成小图片时效果更佳(因为小图信息量更少,相同算力下效果更好);所以适合构造一些交通场景。比如护栏损坏:只mask原图的部分区域(图中白色区域),即可引导模型在mask处生成损坏的护栏。 基于此方…

【LeetCode热题100】【动态规划】完全平方数

题目链接:279. 完全平方数 - 力扣(LeetCode) 完全平方数是可以表示成某个整数的平方的数,要找和为n的完全平方数的最少数目 满足要求的完全平方数最小是1,最大不会超过n的平方根 所以题目变成要从1,2&am…

【LeetCode热题100】【动态规划】最长递增子序列

题目链接:300. 最长递增子序列 - 力扣(LeetCode) 让dp[i]是以nums[i]为结尾的子序列的最长递增长度,遍历nums[i]之前的元素,如果有比nums[i]小的,说明递增子序列可以延申 class Solution { public:int le…

拖拽式工作流有哪几个优势?

在信息技术迅猛发展的今天,如何助力中小型企业在数字化转型的过程中平稳过渡?又是如何让中小型企业摆脱数据孤岛、成本投入高等各种瓶颈和难题?低代码技术平台是近些年较为理想的平台产品,其中拖拽式工作流优势特点突出&#xff0…

地埋电缆故障检测方法有哪些?地埋电缆故障检测费用是多少?

地埋电缆故障检测方法主要涵盖脉冲反射法、桥接法、高压闪络法和声波定位法等多种方法。选择适当的方法取决于故障类型、电缆类型和实际现场条件。至于地埋电缆故障检测费用则受到多个因素的影响,包括故障类型、检测方法的复杂性、检测设备的先进程度以及所处地区的…

从零开始搭建社交圈子系统:充实人脉的最佳路径

线上交友圈:拓展社交网络的新时代 线上交友圈是社交网络的新引擎,提供了更广泛的社交机会,注重共同兴趣的连接,强调多样性的社交形式,更真实地展示自己,让朋友更全面地了解我们的生活状态。虽然虚拟交往存在…

SD-WAN解决电商企业海外业务网络难题

全球化背景下,众多国内企业都涉及到海外贸易业务,尤其是出海电商得到蓬勃发展。企业做出海电商,需要访问国外网页、社交平台,如亚马逊、TikTok、Facebook、YouTube等与客户沟通互动,SD-WAN的发展正好为解决国际网络访问…

时序分析相关考题汇总

时序分析例题_如下一个分频电路,触发器建立时间tsu 2ns,保持时间thold 2ns,逻辑延时tq -CSDN博客 IC/FPGA笔试/面试题分析(七)建立时间和保持时间类型考题汇总分析_建立时间 保持时间 笔试题-CSDN博客

Qt(十二)Graphics View 绘图架构(三)

文章目录 一、QGraphicsView相关整理二、QGraphicsView架构下实时鼠标绘制图形2.1 鼠标拖拽绘图说明2.2 记录图形第一个绘制点2.3 实时获取鼠标最新位置并绘图2.4 释放绘制点,绘制最终图形 三、QGraphicsView 在鼠标点击处进行放大缩小 一、QGraphicsView相关整理 …

14 Php学习:表单

表单 PHP 表单是用于收集用户输入的工具,通常用于网站开发。PHP 可以与 HTML 表单一起使用,用于处理用户提交的数据。通过 PHP 表单,您可以创建各种类型的表单,包括文本输入框、复选框、下拉菜单等,以便用户可以填写和…

孩子不爱学习的解决办法?最佳回答

孩子说不想上学了,想必这句话很多父母都不陌生,从自家孩子嘴里听到过。孩子十三岁了,正是叛逆的时候,很多孩子会在这个时候出现不爱读书的情况,面对这样的情况,家长要保持冷静,采取合理的解决办…

主存储器与CPU之间的连接(会画图)

位扩展 字扩展 由于只有A13, A14 连到了译码器上,以、因此该译码器是一个 2/4 译码器,对应的选片有四种。选中第一个选片,就是把译码器“0口置0, 1~3口置1”,因为CS有非号,因此,低电…

数据结构——线索树

核心思路就是要先将空指针转为线索 也就是多出来的n1个指针&#xff0c;然后再将这些指针连成一个链表&#xff0c;遍历就可以达到O(n&#xff09;的速度打出 以下代码为中序遍历 前序和后续随缘更新 #include <iostream> #include <stdlib.h> using namespace s…

【C++】string的使用

目录 1、为什么学习string类&#xff1f; 2、标准库中的string类 2.1 string类 2.2 string类的常见接口声明 2.2.1 string类的常见构造 ​编辑 2.2.2 string类对象的访问及遍历操作 2.2.3 string类对象的容量操作 2.2.4 string类对象的修改操作 ​编辑 1、为什么学习s…