数据结构复习指导之数组和特殊矩阵

news2024/7/6 21:01:33

文章目录

数组和特殊矩阵

考纲内容

复习提示

前言

1.数组的定义

2.数组的存储结构

3.特殊矩阵的压缩存储

3.1对称矩阵

3.2三角矩阵

3.3三对角矩阵

4.稀疏矩阵

5.知识回顾


数组和特殊矩阵

考纲内容

(一)栈和队列的基本概念

(二)栈和队列的顺序存储结构
(三)栈和队列的链式存储结构
(四)多维数组的存储

(五)特殊矩阵的压缩存储
(六)栈、队列和数组的应用

复习提示

本章通常以选择题的形式考查,题目不算难,但命题的形式比较灵活,其中栈(出入栈的过程、出栈序列的合法性)和队列的操作及其特征是重点。因为它们均是线性表的应用和推广,所以也容易出现在算法设计题中。此外,栈和队列的顺序存储、链式存储及其特点、双端队列的特点、栈和队列的常见应用,以及数组和特殊矩阵的压缩存储都是必须掌握的内容。

前言

矩阵在计算机图形学、工程计算中占有举足轻重的地位。在数据结构中考虑的是如何用最小的内存空间来存储同样的一组数据。所以,我们不研究矩阵及其运算等,而把精力放在如何将矩阵更有效地存储在内存中,并能方便地提取矩阵中的元素。

1.数组的定义

数组是由n(n>1)个相同类型的数据元素构成的有限序列,每个数据元素称为一个数组元素,每个元素在n个线性关系中的序号称为该元素的下标,下标的取值范围称为数组的维界

数组与线性表的关系:数组是线性表的推广。一维数组可视为一个线性表;二维数组可视为其元素是定长数组的线性表,以此类推。数组一旦被定义,其维数和维界就不再改变。因此,除结构的初始化和销毁外,数组只会有存取元素和修改元素的操作。

2.数组的存储结构

大多数计算机语言都提供了数组数据类型,逻辑意义上的数组可采用计算机语言中的数组数据类型进行存储,一个数组的所有元素在内存中占用一段连续的存储空间
以一维数组 A[0..n-1]为例,其存储结构关系式为:

                                                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        LOC(a_{i})=LOC(a_{0})+i\times L(0\leqslant i\leqslant n )

其中,L是每个数组元素所占的存储单元。

二维数组按行优先存储的下标对应关系

对于多维数组,有两种映射方法:按行优先和按列优先

以二维数组为例,按行优先存储的基本思想是:先行后列,先存储行号较小的元素,行号相等先存储列号较小的元素。

设二维数组的行下标与列下标的范围分别为[0,h1]与[0,h2],则存储结构关系式为:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        LOC(a_{i,j})=LOC(a_{0,0})+[i\times (h_{2}+1)+j]\times L

例如,对于数组 A[2][3],它按行优先方式在内存中的存储形式如图 3.18所示。

当以列优先方式存储时,得出存储结构关系式为:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        LOC(a_{i,j})=LOC(a_{0,0})+[j\times (h_{1}+1)+i]\times L

例如,对于数组 A[2][3],它按列优先方式在内存中的存储形式如图 3.19所示。

​​​​​​​

3.特殊矩阵的压缩存储

压缩存储:指为多个值相同的元素只分配一个存储空间,对零元素不分配空间。

特殊矩阵:指具有许多相同矩阵元素或零元素,并且这些相同矩阵元素或零元素的分布有一定规律性的矩阵。

常见的特殊矩阵:对称矩阵、上(下)三角矩阵、对角矩阵等。

特殊矩阵的压缩存储方法:找出特殊矩阵中值相同的矩阵元素的分布规律,把那些呈现规律性分布的、值相同的多个矩阵元素压缩存储到一个存储空间中。

3.1对称矩阵

[命题追踪-对称矩阵压缩存储的下标对应关系]

若对一个 n阶矩阵 A 中的任意一个元素 a ᵢ,ⱼ都有 a ᵢ,ⱼ = a ⱼ,ᵢ  (1<=i,j<=n),则称其为对称矩阵。
其中的元素可以划分为3个部分,即上三角区、主对角线和下三角区。

对于n阶对称矩阵,上三角区的所有元素和下三角区的对应元素相同,若仍采用二维数组存放,则会浪费几乎一半的空间,为此将n阶对称矩阵A存放在一维数组B[n(n+1)/2]中,即元素aᵢ,ⱼ,存放在bₖ以中。比如只存放下三角部分(含主对角)的元素。
在数组B中,位于元素aᵢ,ⱼ (i=>j)前面的元素个数为
第1行:1个元素(a₁,₁)。
第2行:2个元素(a₂,₁,a₂,₂)。
. . . . . .
第i-1行:i-1个元素(aᵢ-₁,₁, aᵢ-₁,₂,…,aᵢ-₁ ,ᵢ-₁ )。
第i行:j-1个元素(aᵢ,₁,aᵢ,₂,…,aᵢ,ⱼ-₁)。
因此,元素aᵢ,ⱼ 在数组B中的下标k=1+2+…+(i-1)+j-1=i(i-1)/2+j-1(数组下标从 0开始)。

因此,元素下标之间的对应关系如下:

注意:

二维数组 A[n] [n](行列都是n个元素)和 A[0..n-1] [0..n-1](行列都是n个元素)的写法是等价的。若数组写为 A[1..n][1..n],则说明指定了从下标 1开始存储元素。二维数组元素写为 a[i][j],注意数组元素下标i和j通常是从0开始的矩阵元素通常写为 ai,j或 a(i)(j),注意行号i和列号j是从1开始的

3.2三角矩阵

下三角矩阵[见图3.22(a)]中,上三角区的所有元素均为同一常量。其存储思想与对称矩阵类似,不同之处在于存储完下三角区和主对角线上的元素之后,紧接着存储对角线上方的常量一次,所以可以将n阶下三角矩阵A压缩存储在B[n(n+1)/2+1]中。
元素下标之间的对应关系为:

下三角矩阵在内存中的压缩存储形式如图3.21所示

[命题追踪-上三角矩阵采用行优先存储的应用]

上三角矩阵[见图 3.22(b)]中,下三角区的所有元素均为同一常量。只需存储主对角线、上三角区上的元素和下三角区的常量一次,可将其压缩存储在B[n(n+1)/2+1]中。

在数组B中,位于元素aᵢ,ⱼ (i<=j)前面的元素个数为:
第1行:n个元素
第2行:n-1个元素

 . . . . . .

第i-1行:n-i+2个元素
第i行:j-i个元素

因此,元素 aᵢ,ⱼ 在数组B中的下标
k=n+( n-1 )+…+( n-i+2 )+( j-i+1 )-1=( i-1 )( 2n-i +2 )/2+( j-i )

因此,元素下标之间的对应关系如下:

上三角矩阵在内存中的压缩存储形式如图所示。

以上推导均假设数组的下标从0开始,若题设有具体要求,则应该灵活应对

3.3三对角矩阵

对角矩阵也称带状矩阵。对n阶矩阵A中的任意一个元素a,,当 |i-j| >1时,若有aᵢ,ⱼ =0(1<=i,j<=n),则称为三对角矩阵。在三对角矩阵中,所有非零元素都集中在以主对角线为中心的3条对角线的区域,其他区域的元素都为零。

三对角矩阵A也可以采用压缩存储,将3条对角线上的元素按行优先方式存放在一维数组B中,且a存放于B[0]中,其存储形式如图3.25 所示。

[命题追踪-三对角矩阵压缩存储的下标对应关系]

由此可以计算矩阵A中3条对角线上的元素aᵢ,ⱼ(1≤i,j≤n,|i-j|≤1)在一维数组B中存放的下标为k=2i+j-3。

反之,若已知三对角矩阵中的某个元素aᵢ,ⱼ存放在一维数组B的第k个位置,则有i=[(k+ 1)/3+1],j=k-2i+3。

例如:

当k=0时,i=[(0+1)/3+1]=1,j=0-2x1+3=1,存放的是a₁​​​​​​​,₁;

当k=2时,i=[(2+1)/3+1]=2,j=2-2x2+3=1,存放的是a₂,₁ ;

当k=4时,i=[(4+1)/3+1]=2,j=4-2x2+3=3,存放的是a₂,₃。

4.稀疏矩阵

矩阵中非零元素的个数t,相对矩阵元素的个数s来说非常少,即s>>t的矩阵称为稀疏矩阵
例如,一个矩阵的阶为100x100,该矩阵中只有少于100个非零元素。

[命题追踪-存储稀疏矩阵需要保存的信息]

若采用常规的方法存储稀疏矩阵,则相当浪费存储空间,因此仅存储非零元素。但通常非零元素的分布没有规律,所以仅存储非零元素的值是不够的,还要存储它所在的行和列。因此,将非零元素及其相应的行和列构成一个三元组(行标i,列标j,值aᵢ,ⱼ ),如图 3.26 所示。然后按照某种规律存储这些三元组线性表。稀疏矩阵压缩存储后便失去了随机存取特性

[命题追踪-适合稀疏矩阵压缩存储的存储结构]

稀疏矩阵的三元组表既可以采用数组存储,又可以采用十字链表存储(见6.2节后续讲解)。当存储稀疏矩阵时,不仅要保存三元组表,而且要保存稀疏矩阵的行数、列数和非零元素的个数。

5.知识回顾

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

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

相关文章

数据结构六:线性表之顺序栈的设计

目录 一、栈的应用场景 二、栈的基本概念和结构 2.1 栈的基本概念 2.2 栈的结构 2.3 栈的实现方式 三、顺序栈的接口函数实现 3.0 顺序栈的概念和结构 3.1 顺序栈的接口函数 3.2 顺序栈的设计&#xff08;结构体&#xff09; 3.3 顺序栈的初始化 3.4 入栈&#x…

Python转换文本文件为PDF文档,绘制文本到PDF文档页面

文本文件因其轻便、易编辑的优势&#xff0c;常用于日常文字记录与数据交换&#xff1b;而PDF文档则以高保真、格式稳定和良好的阅读体验&#xff0c;成为正式报告、文献发布等场景的首选。将文本文件转为PDF&#xff0c;在PDF内精准绘制文本&#xff0c;旨在兼顾内容的规范呈现…

云计算革新:以太网 Scale-UP 网络为 GPU 加速赋能

谈谈基于以太网的GPU Scale-UP网络 Intel Gaudi-3 采用 RoCE 互联技术&#xff0c;促进了 Scale-UP 解决方案。业界专家 Jim Keller 倡导以太网替代 NVLink。Tenstorrent 成功应用以太网实现片上网络互联。RoCE 和以太网已成为互联解决方案的新兴趋势&#xff0c;为高性能计算提…

区块链技术--编译BSV源码(v1.0.1)

编译好的可执行文件bitcoin-cli 和 bitcoind 下载: https://github.com/youngqqcn/QBlockChainNotes/blob/master/BTC%E7%B3%BB%E5%B1%B1%E5%AF%A8%E5%B8%81/my_bsv_v1.0.1.tar.gz 安装 libminiupnpc wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packa…

商店数据(六)

目录 41.短信发送记录表 42.职员登录记录表 43.会员登录记录表 ​44.后台菜单表 45.商城信息表 46.消息队列表 47.移动端首页按钮管理表 48.商城导航表 41.短信发送记录表 CREATE TABLE wst_log_sms (smsId int(11) NOT NULL AUTO_INCREMENT COMMENT 自增ID,smsSrc t…

IOCP实现UDP Server

IOCP实现UDP Server 1、IOCP原理图 参考文献1&#xff1a;IOCP详解-阿里云开发者社区 (aliyun.com) 参考文献2&#xff1a;IOCP编程之基本原理 - 史D芬周 - 博客园 (cnblogs.com) 原理图 同步以及异步 2、UDP Server代码以及测试代码 // iocpudpdemo.cpp : 此文件包含 &qu…

再谈钓鱼邮件

再谈钓鱼邮件 概述 最近对邮件的防御策略进行了更新&#xff0c;结合威胁情报和安全沙箱对收到的钓鱼邮件进行了分析&#xff0c;期望这些案例能对大家有所帮助。 网关上拦截的钓鱼邮件基本可以分三个类别&#xff1a;链接钓鱼邮件、附件钓鱼邮件以及邮件头伪造钓鱼邮件&…

在谷歌浏览器访问特定的网站 提示此网站无法提供安全连接

1、问题描述&#xff1a; 最近通过谷歌浏览器访问某些网址提示此网站无法提供安全连接&#xff0c;换一个浏览器就能正确打开&#xff01; 例子如下&#xff1a; 访问 https://baijiahao.baidu.com/s?id1788533041823242656 2、查找原因 通过控制台发现请求未有响应码&#xf…

【数据分析面试】34.填充NaN值 (Python:groupby/sort_value/ffill)

题目&#xff1a;填充NaN值 &#xff08;Python) 给定一个包含三列的DataFrame&#xff1a;client_id、ranking、value 编写一个函数&#xff0c;将value列中的NaN值用相同client_id的前一个非NaN值填充&#xff0c;按升序排列。 如果不存在前一个client_id&#xff0c;则返…

小红书从记忆机制解读信息检索,提出新范式获得 EACL Oral

近日&#xff0c;来自小红书搜索算法团队的论文《Generative Dense Retrieval: Memory Can Be a Burden》被自然语言处理领域国际会议 EACL 2024 接收为 Oral&#xff0c;接受率为 11.32%&#xff08;144/1271&#xff09;。 他们在论文中提出了一种新颖的信息检索范式——生成…

python环境安装jupyter

安装完毕之后下一步可以参考&#xff1a;配置jupyter的启动路径-CSDN博客 1 前提条件&#xff1a;python环境 系统&#xff1a;win10 python&#xff1a;本地已经有python&#xff0c;可以查看本地的python版本&#xff1a; C:\Users\PC>python --version Python 3.8.10 …

为什么本国货币的贬值会导致本国物价的上涨

本国货币贬值意味着其对外国货币的汇率下降&#xff0c;也就是说&#xff0c;同样数量的本国货币现在能兑换的外国货币减少了。这种情况下&#xff0c;本国货币的购买力相对于外国货币减弱了。本国货币贬值可能导致本国物价上涨的几个原因&#xff1a; 进口成本上升&#xff1a…

38.WEB渗透测试-信息收集-信息收集-企业信息收集(5)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;37.WEB渗透测试-信息收集-企业信息收集&#xff08;4&#xff09; 上个内容用到了cdn&am…

Windows Server 评估版转换(升级)为完整版

临时方法 获取 Windows Server 的剩余宽限期 Slmgr /dliWindows Server免费试用期可以使用以下命令合法延长5次&#xff0c;共180天&#xff1a; slmgr /rearm这意味着所评估的 Windows Server 的最长可用时间为 3 年 ( 180 days * 6)。 试用期到期后&#xff0c;Windows S…

Python对Excel两列数据进行运算

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python对Excel两列数据进行运算 在日常工作中&#xff0c;经常会遇到需要对Excel表格中的数…

win中python中OpenCV使用cv2.imshow()报错的解决办法

1. 问题 cv2.error: OpenCV(4.9.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:1272: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK 2.x or Cocoa support. If you are on Ubuntu o…

STM32读写备份寄存器BKP

今天学习的读写STM32的备份寄存器BKP的步骤&#xff0c;这节知识是比较简单的&#xff0c;一共也就两大部&#xff1a; 这个BKP寄存器的意思就是在芯片的VB引脚上接个电池&#xff0c;就能保存其寄存器中的数据掉电不丢失。先来看看电池的接法&#xff1a; 好&#xff0c;下面…

3分钟了解拍摄VR全景需要哪些硬件

VR全景图片是一张水平方向360度&#xff0c;垂直方向180度&#xff0c; 图片尺寸宽高比为2:1的图片。 通过720yun APP或720yun官网上传生成全景H5页面&#xff0c;即可360度全方位观看画面中的景象。 拍摄VR全景有很多方法&#xff0c;下面介绍用单反相机、全景相机、智能手机…

【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)

【Paddle】PCA线性代数基础及领域应用 写在最前面一、PCA线性代数基础1. PCA的算法原理2. PCA的线性代数基础2.1 标准差 Standard Deviation2.2 方差 Variance2.3 协方差 Covariance2.4 协方差矩阵 The Covariance Matrix2.5 paddle代码demo①&#xff1a;计算协方差矩阵2.6 特…

华院计算登榜『2024福布斯中国人工智能科技企业TOP 50』

4月28日&#xff0c;福布斯中国正式发布“2024福布斯中国人工智能科技企业TOP 50”榜单。华院计算凭借其在人工智能领域的卓越成就与深远影响力&#xff0c;荣膺殊荣&#xff0c;成功跻身榜单。 工业和信息化部2024年4月表示&#xff0c;中国人工智能企业数量已超过4,500家。AI…