欢迎来到天天文库
浏览记录
ID:43518229
大小:174.50 KB
页数:32页
时间:2019-10-09
《矩阵及其基本算法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、矩阵及其基本算法计13刘汝佳矩阵及其基本算法矩阵的表示矩阵的基本运算小结和应用举例一、矩阵的表示三角矩阵的压缩表示法稀疏矩阵的三元组表示法稀疏矩阵的十字链表表示法矩阵在形式上最直接的表示是一个二维数组,但是在一些特殊的场合中,我们需要引入一些特殊的方法来表示一些特殊的矩阵。在本节中,大家还将了解到以下几种表示方法:矩阵的二维数组表示法structTMatrix{intn,m;intnumbers[MAXN+1][MAXN+1];};我们用二维数组很容易表示一个矩阵。加上矩阵的维数M和N,我们可以定义一个TMatrix结
2、构:这就是矩阵的二维数组表示法。怎么样,容易吧?三角矩阵的压缩表示(1)N阶上三角矩阵,对称矩阵和反对称矩阵都只需要储存主对角线以上的共(N+1)*N/2个元素。因此,我们可以用一个大小为(N+1)*N/2的一维数组来表示。不过,我们需要一个公式,把每个元素原来的位置(i,j)映射到一维数组的下标k。三角矩阵的压缩表示(2)我们从上到下,从左到右地储存各个元素,如下图:Aij前面的数的个数为:计算得:稀疏矩阵在前面的二维数组表示法中,我们表示一个N*M的矩阵需要N*M个内存单元。如果已知矩阵中存在着大量的0元素,那么这
3、种表示方法是很浪费空间的。由于非零元素的个数L十分有限,我们可以只储存下这L个元素的位置和大小,占用的空间便会少得多。稀疏矩阵的三元组表示法显然,表示稀疏矩阵最直接的方法就是仅记录下非零元素的个数L和这L个元素的位置(row,col)和大小(value),即下面这个结构:structTMatrix2{intl;introw[MAXL],col[MAXL],value[MAXL];};稀疏矩阵的十字链表表示(1)三元组表示法比较好的解决了稀疏矩阵的空间存储问题,却忽视了稀疏矩阵可能进行了一些基本操作。考虑两个稀疏矩阵A和
4、B相加的问题。对于运算结果矩阵C来说,可能会因为正负抵消而产生出很多新的零元素和非零元素,导致三元组需要进行一些插入和删除操作。当这些操作很频繁的时候,程序的速度会明显变慢。在某些特定情况下,我们需要对元素进行检索,由于三元组的元素之间联系并不紧密,所以检索很不方便。稀疏矩阵的十字链表表示(2)为了加强同一行和同一列之间元素的联系,我们把每一行分别做成一个链表,把每一列也分别做成一个链表。通过对链表的遍历,我们可以很方便的按顺序访问到某一特定行或列的所有元素。插入和删除操作也很方便。这样,我们了建立一种十字型的链表结构
5、,每个结点有上,下,左,右四个指针和自身的位置坐标,大小共7个域。稀疏矩阵的十字链表表示(3)结点类型如下定义:structTnode{introw,col;intvalue;Tnode*left,*right,*up,*down;};row,col分别为该非零元素的位置,value为它的值。left,right,up,down分别为指向四个方向的后继元素。稀疏矩阵的十字链表表示(4)为了方便的找到每一个包含非零元素的行和列,我们把所有行串在一起,组成一个行链表,把所有列也串在一起,组成一个列链表。像这样:struct
6、TRow{intRowNo;TNode*firstnode;};structTCol{intColNo;TNode*firstnode;};矩阵表示方法小结矩阵的表示方法和应用是分不开的。我们衡量一种表示方法的优劣,需要从不同的角度进行分析。适用范围空间需求量基本操作的时间消耗实现的难易程度以上几种方法都在某些方面表现良好而其他方面不够理想,因此我们需要根据实际需要的侧重点不同,选择合适的表示方法二、矩阵的基本运算矩阵的判重矩阵的线性运算矩阵的转置矩阵乘法矩阵的判重在二维数组表示法中,我们可以用一个二重循环判断两个矩阵
7、是否相等。在三元组表示方法中,我们如果保证非零元素是按照从上到下,从左到右的顺序储存的,则可以用一个循环直接判断。但如果不能保证,则需要二重循环。因此在未加说明的情况下,三元组表示法均需要按顺序保存各个元素。在十字链表表示方法中,我们需要依次遍历每一个非零行(或者列)。矩阵的线性运算矩阵的数乘:B=kA在任何一种表示法中,我们都可以通过遍历所有元素的方法完成数乘运算。矩阵的加法:C=A+B在二维数组表示法中,我们可以通过二重循环来进行矩阵加法在稀疏矩阵中,注意到结果中的非零元素所在的位置必对应A或B中的一个非零元素,所
8、以加法运算不会在A和B中原非零元素之外的其他位置上生成新的非零元素。矩阵的线性运算(2)考虑三元组表示法中的矩阵加法。由于都需要按顺序储存各个元素,我们应当按顺序对每个A或B中非零的位置做加法。下面有一个例子:矩阵的线性运算(3)我们记录两个矩阵A,B的当前非零元素序号pA和pB。为了保证结果的有序性,我们每次比较这两个当前元素的
此文档下载收益归作者所有