第五章节 数组.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章节 数组

第五章 数组 引言 本章主要讨论二维数组,它是数学中的矩阵在程序设计语言的表示。程序设计语言中的数组在计算机中是顺序存储的。当矩阵中的绝大部分元素为0时,采用一般的二维数组的存储方式会浪费大量的存储空间,同时也会进行大量不必要的计算。因此本章主要讨论一般二维数组的顺序存储结构,以及当矩阵中大部分元素为0时的表示方法。 第一节 二维数组的顺序存储结构 这种存储方式一般有两种:以行为主的存储方式和以列为主的存储方式。 以行为主的存储方式:是指数组中的元素一行接一行地顺序存储起来。(示例) 如果以这种方式存储二维数组,设数组中第一个元素(a11)的存储地址为ADR(a11),且每一元素占L个字节,则 ADR(aij)=ADR(a11)+[(i-1)n+(j-1)]L 其中1=i=m, 1=j=m 同理可得到,以列为主的存储方式时 ADR(aij)=ADR(a11)+[(i-1)+(j-1)m]L 知识扩展: 在BASIC语言,C语言中,多维数组采用以行为主的存储方式进行存储。 而在FORTRAN语言中则采用以列为主的存储方式进行存储。 第二节 规则矩阵的压缩存储 引言 矩阵是很多学科与工程计算问题中研究的数学对象。但在这里,我们研究的不是矩阵本身,而是如何存储矩阵的元素而使矩阵的各种运算能有效地进行。 相关概念: 如果矩阵中非0元素的分布是有规律的则称其为规则矩阵。 例如,上三角矩阵,下三角矩阵,对称矩阵等等。 除此之外的矩阵便称为稀疏矩阵。 在规则矩阵中,有些0元素或者重复的非0元素不必存储,所以称其为压缩存储。 对称矩阵的存储 若一个n阶矩阵A中的元素满足下述性质 aij = aji (1=i,j=n) 则称其为n阶对称矩阵。 对于对称矩阵,我们可以为每一对对称元素分配一个存储空间,则可将n2个元素压缩存储到n(n+1)/2个存储空间中去。 假设以一维数组B(1: n(n+1)/2)作为n阶矩阵A的存储结构,则B[k]和矩阵aij之间存在着一一对应关系: 这种压缩存储的方法同样也适用于三角矩阵。 所谓下(上)三角矩阵是指矩阵的上 (下)三角(不包括对角线)中的元素均为常数c或0的n阶矩阵。 这样除了和对称矩阵一样,只存储其下(上)三角中的元素之外,再加一个常数c的存储空间即可。 对角矩阵的存储 在数值分析中经常出现的还有另一类特殊规则矩阵就是对角矩阵。这种矩阵中,所有非0元素都集中在以主对角线为中心的带状区域中。 下面我们来学习三对角矩阵的压缩存储。 三对角矩阵 从图中可知在三对角矩阵中,三条对角线外的元素均为0,并且除了首末两行外,其他每一行均只有三个元素为0,因此,n阶三对角矩阵共有3n-2个非0元素,所以可用一个长度为3n-2的一维数组来存放三条对角线上的元素。因此 第三节 稀疏矩阵的压缩存储 1、什么是稀疏矩阵 目前还没有确切的定义,一般认为是只有少数元素非0的矩阵。例如: 按照压缩存储的概念,稀疏矩阵只存储非0元。然而,稀疏矩阵中非0元的分布是没有分规律的,不能像规则矩阵那样用一个数组来依次存放其中的非0元。 这时 怎么办呢? 三元组 规则矩阵是利用在数组存放的位置来推导出该元素在矩阵中实际位置。 那么,我们在存储稀疏矩阵时,除了存储非0元之外,还要记下该元所在的行与列的位置(i,j)。 换言之,每个元素可用一个三元组来表示。 三元组的构成:行号i、列号j、元素值v。 示例: 三元组表 如果一个稀疏矩阵有n个非0元,则就有n个三元组,这n个三元组就构成了一个三元组表。(示例) 三元组表是以行为主序,以列为“次”序顺序排列的,这样做有利于进行矩阵运算。 用C语言定义矩阵的三元组表 struct syz { int i,j;ET v; } struct Juzhen { syz data[maxnum] } 下面将讨论在这种压缩存储结构下如何实现矩阵的一种运算:转置。 求转置矩阵 转置矩阵是一种最简单的矩阵运算。对于一个M╳ N的矩阵M,它的转置矩阵N是一个N╳ M的矩阵,且N(i,j)=M(j,i)。例如: 显然,一个稀疏矩阵的转置矩阵仍然是稀疏矩阵。假设a和b是Juzhen型的变量,分别表示矩阵M和N,那么如何由a得到b呢? 三个步骤 从分析a和b之间的差异可见,只要做到: 1、将矩阵的行列值相互交换; 2、将每个三元组中的和互相调换; 3、重排三元组之间的次序; 便可实现矩阵的转置。前2条很容易做到,关键是如何实现第三条。即如何使b中的三元组是以N的行(M的列)为主序, N的列为次序排列的。 两种处理方法——简单算法 从a的第1列开始在a中搜索(从a的第一个元组开始直到最后一个元组),如果a中的列值等于1,

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档