- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 数组 数组可以看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表 4.1 数组的定义和特点 定义 4.2 数组的顺序存储结构 次序约定 以行序为主序 以列序为主序 4.3 矩阵的压缩存储 对称矩阵 三角矩阵 稀疏矩阵的压缩存储方法 顺序存储结构 三元组表 带辅助行向量的二元组表 求转置矩阵 问题描述:已知一个稀疏矩阵的三元组表,求该矩阵转置矩阵的三元组表 问题分析 一般矩阵转置算法: 十字链表 设行指针数组和列指针数组,分别指向每行、列第一个非零元 结点定义 for(col=1;col=a.n;col++) for(p=0;p=a.t;p++) if(a.data[p].j==col){ b.data[q].i=a.data[p].j; b.data[q].j=a.data[p].i; b.data[q].v=a.data[p].v; q++; } } 分析这个算法,主要的工作是在p和col的两个循环中完成的,故算法的时间复杂度为O(n*t),即矩阵的列数和非零元的个数的乘积成正比。而一般传统矩阵的转置算法为: for(col=0;col=n-1;++col) for(row=0;row=m;++row) t[col][row]=m[row][col]; 其时间复杂度为O(n*m)。当非零元素的个数t和m*n同数量级时,算法transmatrix的时间复杂度为O(n*n2)。 三元组顺序表虽然节省了存储空间,但时间复杂度比一般矩阵转置的算法还要复杂,同时还有可能增加算是法的难度。因此,此算法仅适用于t=m*n的情况。 下面给出一种快速转置的算法,其算法思想为:对A扫描一次,按A第二列提供的列号一次确定位置装入B的一个三元组。具体实施如下:一遍扫描先确定三元组的位置关系,二次扫描由位置关系装入三元组。可见,位置关系是此种算法的关键。 为了预先确定矩阵M中的每一列的第一个非零元素在数组B中应有的位置,需要先求得矩阵M中的每一列中非零元素的个数。因为:矩阵M中第一列的第一个非零元素在数组B中应有的位置等于前一列第一个非零元素的位置加上前列非零元素的个数。 为此,需要设置两个一维数组num[0..n]和cpot[0..n] num[0..n]:统计M中每列非零元素的个数,num[col]的值可以由A的第二列求得。 cpot[0..n]:由递推关系得出M中的每列第一个非零元素在B中的位置。 算法通过cpot数组建立位置对应关系: cpot[1]=1 cpot[i]=cpot[i-1]+num[i-1] 2=i=a.n 例如:图中的矩阵M和相应的三元组A可以求得num[i]和 cpot[i]的值如下: i 1 2 3 4 5 6 7 num[i] 2 2 2 1 0 1 0 cpot[i] 1 3 5 7 8 8 9 v 2 1 … q A i j v 第一列元素个数 第二列元素个数 第三列元素个数 num cpot q=cpot[i] v 1 2 p q 快速转置算法如下: void fasttranstri(tritupletable b,tritupletable a){ int p,q,l,k; int num[a.n],copt[a.n]; b.m=a.n; b.n=a.m; b.t=a.t; if(b.t=0) printf(“a=0”\n); for(l=1;l=a.n;++l) num[l]=0; for(k=1;k=a.t;++k) ++num[a.data[k].j]; cpot[0]=1; for(l=2; l=a.t;++l) cpot[l]=cpot[l-1]+num[l-1]; for(p=1;p=a.t;++p){ col=a.data[p].j; q=cpot[l]; b.data[q].i=a.data[p].j; b.data[q].j=a.data[p].i; b.da
您可能关注的文档
最近下载
- 中小学生国庆假期安全教育主题班会PPT课件.pptx VIP
- 《电子商务基础》第一章课件.pptx VIP
- 第2单元活动3 编程实现算法 课件湘科版信息科技五年级上册.ppt
- 1.2记录个人观点(课件)-三年级信息科技全一册(河北大学版2024).pptx VIP
- 《黄金交易基础知识》课件.pptx VIP
- (高清版)DB22∕T 2758-2017 黑参 地标.pdf VIP
- 品牌管理完整版课件全套ppt教学教程(必威体育精装版).pptx
- 2025年GB 45673《危险化学品企业安全生产标准化通用规范》解读宣贯学习课件.pptx
- 消防救援人员申请结婚报告表.doc VIP
- 答司马谏议书选择题及答案.pdf VIP
文档评论(0)