矩阵及其基本算法精选课件.ppt
《矩阵及其基本算法精选课件.ppt》由会员分享,可在线阅读,更多相关《矩阵及其基本算法精选课件.ppt(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、关于矩阵及其基本算法关于矩阵及其基本算法第一页,本课件共有33页矩阵及其基本算法矩阵及其基本算法zz矩阵的表示zz矩阵的基本运算zz小结和应用举例第二页,本课件共有33页一、矩阵的表示一、矩阵的表示zz三角矩阵的压缩表示法zz稀疏矩阵的三元组表示法zz稀疏矩阵的十字链表表示法矩阵在形式上最直接的表示是一个二维数组,但是在一些特殊的场合中,我们需要引入一些特殊的方法来表示一些特殊的矩阵。在本节中,大家还将了解到以下几种表示方法:第三页,本课件共有33页矩阵的二维数组表示法矩阵的二维数组表示法struct TMatrixstruct TMatrix int n,m;int n,m;int numb
2、ersMAXN+1MAXN+1;int numbersMAXN+1MAXN+1;我们用二维数组很容易表示一个矩阵。加上矩阵的维数我们用二维数组很容易表示一个矩阵。加上矩阵的维数M M和和N N,我,我们可以定义一个们可以定义一个TMatrix结构结构:这就是矩阵的二维数组表示法。这就是矩阵的二维数组表示法。怎么样,容易吧?怎么样,容易吧?第四页,本课件共有33页三角矩阵的压缩表示三角矩阵的压缩表示(1)zzN阶上三角矩阵,对称矩阵和反对称矩阵都只需要储存主对角线以上的共(N+1)*N/2个元素。zz因此,我们可以用一个大小为(N+1)*N/2的一维数组来表示。zz不过,我们需要一个公式,把每个
3、元素原来的位置(i,j)映射到一维数组的下标k。第五页,本课件共有33页三角矩阵的压缩表示三角矩阵的压缩表示(2)zz我们从上到下,从左到右地储存各个元素,如下图:A Aijij前面的数的个数为:前面的数的个数为:计算得计算得:第六页,本课件共有33页稀疏矩阵稀疏矩阵zz在前面的二维数组表示法中,我们表示一个N*M的矩阵需要N*M个内存单元。zz如果已知矩阵中存在着大量的0元素,那么这种表示方法是很浪费空间的。zz由于非零元素的个数L十分有限,我们可以只储存下这L个元素的位置和大小,占用的空间便会少得多。第七页,本课件共有33页稀疏矩阵的三元组表示法稀疏矩阵的三元组表示法zz显然,表示稀疏矩阵
4、最直接的方法就是仅记录下非零元素的个数L和这L个元素的位置(row,col)和大小(value),即下面这个结构:struct TMatrix2 int l;int rowMAXL,colMAXL,valueMAXL;第八页,本课件共有33页稀疏矩阵的十字链表表示稀疏矩阵的十字链表表示(1)zz三元组表示法比较好的解决了稀疏矩阵的空间存储问题,却忽三元组表示法比较好的解决了稀疏矩阵的空间存储问题,却忽视了稀疏矩阵可能进行了一些基本操作。视了稀疏矩阵可能进行了一些基本操作。zz考虑两个稀疏矩阵考虑两个稀疏矩阵A A和和B B相加的问题。对于运算结果矩阵相加的问题。对于运算结果矩阵C C来来说,可
5、能会因为正负抵消而产生出很多新的零元素和非说,可能会因为正负抵消而产生出很多新的零元素和非零元素,导致三元组需要进行一些插入和删除操作。当零元素,导致三元组需要进行一些插入和删除操作。当这些操作很频繁的时候,程序的速度会明显变慢。这些操作很频繁的时候,程序的速度会明显变慢。zz在某些特定情况下,我们需要对元素进行检索,由于三元组的在某些特定情况下,我们需要对元素进行检索,由于三元组的元素之间联系并不紧密,所以检索很不方便。元素之间联系并不紧密,所以检索很不方便。第九页,本课件共有33页稀疏矩阵的十字链表表示稀疏矩阵的十字链表表示(2)zz为了加强同一行和同一列之间元素的联系,我们为了加强同一行
6、和同一列之间元素的联系,我们把每一行分别做成一个链表,把每一列也分别做把每一行分别做成一个链表,把每一列也分别做成一个链表。成一个链表。zz通过对链表的遍历,我们可以很方便的按顺序访问到某一特定行或列的所有元素。插入和删除操作也很方便。zz这样,我们了建立一种十字型的链表结构,每个结点有上,下,左,右四个指针和自身的位置坐标,大小共7个域。第十页,本课件共有33页稀疏矩阵的十字链表表示稀疏矩阵的十字链表表示(3)zz结点类型如下定义:struct Tnode int row,col;int value;Tnode*left,*right,*up,*down;row,colrow,col分别为该
7、非零元素的位置,分别为该非零元素的位置,valuevalue为它的值。为它的值。left,right,up,downleft,right,up,down分别为指向四个方向的后继元素。分别为指向四个方向的后继元素。第十一页,本课件共有33页稀疏矩阵的十字链表表示稀疏矩阵的十字链表表示(4)zz为了方便的找到每一个包含非零元素的行和列,我们把所有行串在一起,组成一个行链表,把所有列也串在一起,组成一个列链表。像这样:struct TRow int RowNo;TNode*firstnode;struct TCol int ColNo;TNode*firstnode;第十二页,本课件共有33页矩阵表
8、示方法小结矩阵表示方法小结zz矩阵的表示方法和应用是分不开的。zz我们衡量一种表示方法的优劣,需要从不同的角度进行分析。zz适用范围适用范围zz空间需求量zz基本操作的时间消耗zz实现的难易程度zz以上几种方法都在某些方面表现良好而其他方面以上几种方法都在某些方面表现良好而其他方面不够理想,因此我们需要根据实际需要的侧重点不够理想,因此我们需要根据实际需要的侧重点不同,选择合适的表示方法不同,选择合适的表示方法第十三页,本课件共有33页二、矩阵的基本运算二、矩阵的基本运算zz矩阵的判重zz矩阵的线性运算zz矩阵的转置zz矩阵乘法第十四页,本课件共有33页矩阵的判重矩阵的判重zz在二维数组表示法
9、中,我们可以用一个二重循环判在二维数组表示法中,我们可以用一个二重循环判断两个矩阵是否相等。断两个矩阵是否相等。zz在三元组表示方法中,我们如果保证非零元素是按在三元组表示方法中,我们如果保证非零元素是按照从上到下,从左到右的顺序储存的,则可以用一照从上到下,从左到右的顺序储存的,则可以用一个循环直接判断。但如果不能保证,则需要二重循个循环直接判断。但如果不能保证,则需要二重循环。因此在未加说明的情况下,三元组表示法均需环。因此在未加说明的情况下,三元组表示法均需要按顺序保存各个元素。要按顺序保存各个元素。zz在十字链表表示方法中,我们需要依次遍历每一个非零行(或者列)。第十五页,本课件共有3
10、3页矩阵的线性运算矩阵的线性运算zz矩阵的数乘:B=kAzz在任何一种表示法中,我们都可以通过遍历所有元在任何一种表示法中,我们都可以通过遍历所有元素的方法完成数乘运算。素的方法完成数乘运算。zz矩阵的加法:C=A+Bzz在二维数组表示法中,我们可以通过二重循环来进行矩在二维数组表示法中,我们可以通过二重循环来进行矩阵加法阵加法zz在稀疏矩阵中,注意到结果中的非零元素所在的位置必在稀疏矩阵中,注意到结果中的非零元素所在的位置必对应对应A A或或B B中的一个非零元素,所以加法运算不会在中的一个非零元素,所以加法运算不会在A A和和B B中原非零元素之外的其他位置上生成新的非零元中原非零元素之外
11、的其他位置上生成新的非零元素。素。第十六页,本课件共有33页矩阵的线性运算矩阵的线性运算(2)zz考虑三元组表示法中的矩阵加法。由于都需要按顺序储存各个元素,我们应当按顺序对每个A或B中非零的位置做加法。zz下面有一个例子:第十七页,本课件共有33页矩阵的线性运算矩阵的线性运算(3)zz我们记录两个矩阵A,B的当前非零元素序号pA和pB。为了保证结果的有序性,我们每次比较这两个当前元素的位置。zz如果如果A A的当前位置靠前,则把的当前位置靠前,则把A A的第的第pApA个元素加入矩个元素加入矩阵阵C C,并使,并使pA=pA+1pA=pA+1zz如果如果B B的当前位置靠前,则把的当前位置靠
12、前,则把B B的第的第pBpB个元素加入矩阵个元素加入矩阵C C,并使,并使pB=pB+1pB=pB+1zz如果当前位置相同,则先使如果当前位置相同,则先使pA=pA+1,pB=pB+1pA=pA+1,pB=pB+1。如果。如果A A的第的第pA-1pA-1个元素和个元素和B B的第的第pB-1pB-1个元素的和不为零,则把它个元素的和不为零,则把它加到矩阵加到矩阵C C中。中。第十八页,本课件共有33页矩阵的线性运算矩阵的线性运算(4)zz十字链表表示法下的加法可以一行行的做。即:十字链表表示法下的加法可以一行行的做。即:zz如果如果A A的当前行号比的当前行号比B B小,把小,把A A的当
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵 及其 基本 算法 精选 课件
限制150内