- 1、本文档共52页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构chapter5数组和广义表解析
算法分析:本算法主要的工作是在p和col的两个循环中完成的,故算法的时间复杂度为O(cn?tn),即矩阵的列数和非0元素的个数的乘积成正比。 而一般传统矩阵的转置算法为: for(col=1; col=n ;++col) for(row=0 ; row=m ;++row) b[col][row]=a[row][col] ; 其时间复杂度为O(n?m)。当非零元素的个数tn和m?n同数量级时,算法TransMatrix的时间复杂度为O(m?n2)。 由此可见,虽然节省了存储空间,但时间复杂度却大大增加。所以上述算法只适合于稀疏矩阵中非0元素的个数tn远远小于m?n的情况。 方法二(快速转置的算法) 算法思想:直接按照稀疏矩阵A的三元组表a.data的次序依次顺序转换,并将转换后的三元组放置于三元组表b.data的恰当位置。 前提:若能预先确定原矩阵A中每一列的(即B中每一行)第一个非0元素在b.data中应有的位置,则在作转置时就可直接放在b.data中恰当的位置。因此,应先求得A中每一列的非0元素个数。 附设两个辅助向量num和cpot。 ◆ num[col]:统计A中第col列中非0元素的个数; ◆ cpot[col] :指示A中第col列的第一个非0元素在b.data中的恰当位置。 5.3.2 稀疏矩阵 稀疏矩阵(Sparse Matrix):对于稀疏矩阵,目前还没有一个确切的定义。设矩阵A是一个n?m的矩阵中有s个非零元素,设 δ=s/(n?m),称δ为稀疏因子,如果某一矩阵的稀疏因子δ满足δ≦0.05时称为稀疏矩阵,如图5.8所示。 0 12 9 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 0 0 0 0 0 0 4 0 0 24 0 0 2 0 0 0 18 0 0 0 0 0 0 0 0 0 0 0 0 -7 0 A= 0 0 0 -6 0 0 0 0 图5.8 稀疏矩阵示例 显然有位置对应关系: cpot[1]=1 cpot[col]=cpot[col-1]+num[col-1] 2≦col≦a.cn 例图5.8中的矩阵A和表5.9(a)的相应的三元组表可以求得num[col]和cpot[col]的值如表5.1: num[col] 1 2 2 1 0 1 1 1 col 1 2 3 4 5 6 7 8 cpot[col] 1 2 4 6 7 7 8 9 表5.1 num[col]和cpot[col]的值表 快速转置算法如下: void FastTransMatrix(TSMatrix a, TSMatrix b) { int p , q , col , k ; int num[MAX_SIZE] , cpot[MAX_SIZE] ; b.rn=a.cn ; b.cn=a.rn ; b.tn=a.tn ; /* 置三元组表b.data的行、列数和非0元素个数 */ if (b.tn==0) printf(“ The Matrix A=0\n” ) ; else { for (col=1 ; col=a.cn ; ++col) num[col]=0 ; /* 向量num[]初始化为0 */ for (k=1 ; k=a.tn ; ++k) ++num[ a.data[k].col] ; /* 求原矩阵中每一列非0元素个数 */ for (cpot[1]=1, col=2 ; col=a.cn ; ++col) cpot[col]=cpot[col-1]+num[col-1] ; /* 求第col列中第一个非0元在b.data中的序号 */ for (p=1 ; p=a.tn ; ++p) { col=a.data[p].col ; q=cpot[col] ; b.data[q].row=a.data[p].col ; b.data[q].col=a.data[p].row ; b.data[q].value=a.data[p].value ; ++cpot[col] ; } } } 3 十字链表
您可能关注的文档
- 数据库 02-第二章解析.ppt
- 数据库6-关系数据理论解析.ppt
- 数据库习题解答解析.doc
- 数据库7-数据库设计解析.ppt
- 数据库医药管理系统解析.doc
- 数据库原理与应用2解析.doc
- 数据库原理与应用3解析.doc
- 数据库原理与应用5解析.doc
- 数据库原理与应用4解析.doc
- 数据库原理与应用试卷1解析.doc
- 2025年广东住院医师-广东住院医师医学检验学考试近5年真题荟萃附答案.docx
- 2025年广东住院医师-广东住院医师外科学考试近5年真题荟萃附答案.docx
- 2025年广东住院医师-广东住院医师内科学考试近5年真题集锦(频考类试题)带答案.docx
- 2025年广东住院医师-广东住院医师口腔医学考试近5年真题集锦(频考类试题)带答案.docx
- 2025年广东住院医师-广东住院医师口腔医学考试近5年真题荟萃附答案.docx
- 2025年广东住院医师-广东住院医师妇产科学考试近5年真题集锦(频考类试题)带答案.docx
- 意识障碍护理常规.pptx
- 2025年广东住院医师-广东住院医师妇产科学考试近5年真题荟萃附答案.docx
- 2025年广东住院医师-广东住院医师小儿外科学考试近5年真题集锦(频考类试题)带答案.docx
- 2025年广东住院医师-广东住院医师小儿外科学考试近5年真题荟萃附答案.docx
文档评论(0)