矩阵及其基本算法.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文档。上传文档
查看更多
矩阵及其基本算法.ppt

矩阵及其基本算法 计13 刘汝佳 矩阵及其基本算法 矩阵的表示 矩阵的基本运算 小结和应用举例 一、矩阵的表示 三角矩阵的压缩表示法 稀疏矩阵的三元组表示法 稀疏矩阵的十字链表表示法 矩阵的二维数组表示法 struct TMatrix { int n,m; int numbers[MAXN+1][MAXN+1]; }; 三角矩阵的压缩表示(1) N阶上三角矩阵,对称矩阵和反对称矩阵都只需要储存主对角线以上的共(N+1)*N/2个元素。 因此,我们可以用一个大小为(N+1)*N/2的一维数组来表示。 不过,我们需要一个公式,把每个元素原来的位置(i,j)映射到一维数组的下标k。 三角矩阵的压缩表示(2) 我们从上到下,从左到右地储存各个元素,如下图: 稀疏矩阵 在前面的二维数组表示法中,我们表示一个N*M的矩阵需要N*M个内存单元。 如果已知矩阵中存在着大量的0元素,那么这种表示方法是很浪费空间的。 由于非零元素的个数L十分有限,我们可以只储存下这L个元素的位置和大小,占用的空间便会少得多。 稀疏矩阵的三元组表示法 显然,表示稀疏矩阵最直接的方法就是仅记录下非零元素的个数L和这L个元素的位置(row,col)和大小(value),即下面这个结构: 稀疏矩阵的十字链表表示(1) 三元组表示法比较好的解决了稀疏矩阵的空间存储问题,却忽视了稀疏矩阵可能进行了一些基本操作。 考虑两个稀疏矩阵A和B相加的问题。对于运算结果矩阵C来说,可能会因为正负抵消而产生出很多新的零元素和非零元素,导致三元组需要进行一些插入和删除操作。当这些操作很频繁的时候,程序的速度会明显变慢。 在某些特定情况下,我们需要对元素进行检索,由于三元组的元素之间联系并不紧密,所以检索很不方便。 稀疏矩阵的十字链表表示(2) 为了加强同一行和同一列之间元素的联系,我们把每一行分别做成一个链表,把每一列也分别做成一个链表。 通过对链表的遍历,我们可以很方便的按顺序访问到某一特定行或列的所有元素。插入和删除操作也很方便。 这样,我们了建立一种十字型的链表结构,每个结点有上,下,左,右四个指针和自身的位置坐标,大小共7个域。 稀疏矩阵的十字链表表示(3) 结点类型如下定义: 稀疏矩阵的十字链表表示(4) 为了方便的找到每一个包含非零元素的行和列,我们把所有行串在一起,组成一个行链表,把所有列也串在一起,组成一个列链表。像这样: 矩阵表示方法小结 矩阵的表示方法和应用是分不开的。 我们衡量一种表示方法的优劣,需要从不同的角度进行分析。 适用范围 空间需求量 基本操作的时间消耗 实现的难易程度 以上几种方法都在某些方面表现良好而其他方面不够理想,因此我们需要根据实际需要的侧重点不同,选择合适的表示方法 二、矩阵的基本运算 矩阵的判重 矩阵的线性运算 矩阵的转置 矩阵乘法 矩阵的判重 在二维数组表示法中,我们可以用一个二重循环判断两个矩阵是否相等。 在三元组表示方法中,我们如果保证非零元素是按照从上到下,从左到右的顺序储存的,则可以用一个循环直接判断。但如果不能保证,则需要二重循环。因此在未加说明的情况下,三元组表示法均需要按顺序保存各个元素。 在十字链表表示方法中,我们需要依次遍历每一个非零行(或者列)。 矩阵的线性运算 矩阵的数乘: B=kA 在任何一种表示法中,我们都可以通过遍历所有元素的方法完成数乘运算。 矩阵的加法: C=A+B 在二维数组表示法中,我们可以通过二重循环来进行矩阵加法 在稀疏矩阵中,注意到结果中的非零元素所在的位置必对应A或B中的一个非零元素,所以加法运算不会在A和B中原非零元素之外的其他位置上生成新的非零元素。 矩阵的线性运算(2) 考虑三元组表示法中的矩阵加法。由于都需要按顺序储存各个元素,我们应当按顺序对每个A或B中非零的位置做加法。 下面有一个例子: 矩阵的线性运算(3) 我们记录两个矩阵A,B的当前非零元素序号pA和pB。为了保证结果的有序性,我们每次比较这两个当前元素的位置。 如果A的当前位置靠前,则把A的第pA个元素加入矩阵C,并使pA=pA+1 如果B的当前位置靠前,则把B的第pB个元素加入矩阵C,并使pB=pB+1 如果当前位置相同,则先使pA=pA+1, pB=pB+1。如果A的第pA-1个元素和B的第pB-1个元素的和不为零,则把它加到矩阵C中。 矩阵的线性运算(4) 十字链表表示法下的加法可以一行行的做。即: 如果A的当前行号比B小,把A的当前行整个复制到C中。 如果B的当前行号比A小,把B的当前行整个复制到C中。 否则把A的当前行和B的当前行的合并结果加入C中。 第三种情况和三元组表示下的加法很类似,只是下标pA,pB换成了指针。 同样的,需要注意两个非零元素之和可能等于零,从而不能插入到结果中 矩

文档评论(0)

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

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

1亿VIP精品文档

相关文档