ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:217.13KB ,
资源ID:19668165      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19668165.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课程设计稀疏矩阵应用Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

课程设计稀疏矩阵应用Word文档下载推荐.docx

1、 目前已经可以用于人脸识别、子空间方法预处理技术稀疏近似逆按模最小特征值修正矩阵广义极小残余方法等方面。1.3任务与分析 (1)给出算法并编程实现;(2)任给实例并演示求解结果;(3)给出时间复杂度分析;(4)结合所完成题目,分析总结各算法所使用的算法设计技术,以及相应技术的基本思想。2 程序的主要功能2.1三元组的转置将一个按三元组存储的稀疏矩阵进行转置。2.2三元组的加法将两个按三元组存储的稀疏矩阵进行相加并得出结果。2.3三元组的减法将两个按三元组存储的稀疏矩阵进行相减并得出结果。2.4三元组的乘法将两个按三元组存储的稀疏矩阵进行相乘并得出结果。2.5十字链表的转置 将一个按十字链表存储

2、的稀疏矩阵进行转置。2.6十字链表的加法将两个按十字链表存储的稀疏矩阵进行相加并得出结果。2.7十字链表的减法2.8十字链表的乘法3程序运行平台VC+6.0。编译,链接,执行。4总体设计 图4.1 系统总体框架图5程序类的说明OLNode结构声明typedef struct OLNode int i,j; int e; struct OLNode *right,*down;OLNode,*OLink;Crosslist结构的声明typedef struct int mu,nu,tu; OLink *rhead,*chead;CrossList;Triple结构的声明typedef struct

3、Triple;TSMatrix结构的声明 Triple datamaxsize; int rposmaxsize+1; int nu,mu,tu;TSMatrix;6 模块分析6.1 三元组的转置将一个按三元组存储的稀疏矩阵进行转置(非快速转置)。void TransposeSMatrix(TSMatrix M,TSMatrix &T)/三元组的转置 T.nu=M.mu; T.mu=M.nu; T.tu=M.tu; int q=1; for(int col=1;col=M.nu;col+) for(int p=1;pa2)return 1; else if(a1b2) return 1; if

4、(b1T.mu?M.mu:T.mu; S.nu=M.nuT.nu?M.nu:T.nu; S.tu=0; int ce;int mcount=1,tcount=1; while(mcount=M.tu&tcount=T.tu) switch(Compare(M.datamcount.i,M.datamcount.j,T.datatcount.i,T.datatcount.j) case -1: S.dataq.e=M.datamcount.e; S.dataq.i=M.datamcount.i; S.dataq.j=M.datamcount.j; mcount+; break; case 1:

5、S.dataq.e=T.datatcount.e; S.dataq.i=T.datatcount.i; S.dataq.j=T.datatcount.j; tcount+; case 0: ce=M.datamcount.e+T.datatcount.e; if(ce) S.dataq.e=ce; S.dataq.i=M.datamcount.i; S.dataq.j=M.datamcount.j; q+; mcount+; tcount+; else =M.tu) S.dataq.e=M.datamcount.e; S.dataq.i=M.datamcount.i; S.dataq.j=M.

6、datamcount.j; q+; mcount+; while(tcount S.dataq.e=T.datatcount.e; S.dataq.i=T.datatcount.i; S.dataq.j=T.datatcount.j; tcount+; S.tu=q-1;6.3三元组的减法用户再输入一个稀疏矩阵,系统将两个矩阵进行加运、减算并得出结果。void jianTMatix(TSMatrix M,TSMatrix T,TSMatrix &S)/三元组相减 S.dataq.e=-T.datatcount.e; ce=M.datamcount.e-T.datatcount.e; S.dat

7、aq.e=-T.datatcount.e;6.4三元组的乘法用户再输入一个稀疏矩阵,系统将其进行乘法运算并得出结果。int MultSMatrix(TSMatrix M, TSMatrix N, TSMatrix &Q) /三元组相乘 int arow,brow,ccol,i,t,ctemp100,p,q,tp; if(M.nu != N.mu) Q.mu=M.mu; Q.nu =N.nu; Q.tu =0; if(M.tu*N.tu!=0) for(arow=1;arow=M.mu;+arow) for(i=0;i=N.nu;+i) ctempi=0; Q.rposarow=Q.tu+1;

8、if(arowM.mu) tp=M.rposarow+1; else tp=M.tu+1; for(p=M.rposarow;tp;+p) brow=M.datap.j; if(browN.mu) t=N.rposbrow+1; else t=N.tu+1; for(q=N.rposbrow;qt +q) ccol=N.dataq.j; ctempccol+=M.datap.e*N.dataq.e; for(ccol=1;ccolmaxsize) return 1; Q.dataQ.tu.i=arow,Q.dataQ.tu.j=ccol,Q.dataQ.tu.e=ctempccol; retu

9、rn 1;6.5 十字链表的转置 void TurnSMatrix_OL(CrossList &M) /十字链表转置 int col,row; OLink p,q; for(col=1; q=p=M.rheadcol; while(q) row=p-i; p-i=p-j;j=row; q=p-right;right=p-down;down=q;6.6 十字链表的加法int SMatrix_ADD(CrossList *A,CrossList *B) /十字链表相加 OLNode *pa,*pb,*pre,*p,*cp100; int i,j,t; t=A-tu+B-tu; for(j=1;jn

10、u;j+) cpj=A-cheadj; for(i=1;mu;i+) pa=A-rheadi; pb=B- pre=NULL; while(pb) if(pa=NULL|pa-jpb-j) p=(OLink)malloc(sizeof(OLNode); if(!pre) A-rheadi=p; pre-right=p; p-right=pa; pre=p;i=i;j=pb-e=pb-e;A-cheadp-j)j=cpp-j=p; p-down=NULL; cpp-j-down=p; pb=pb- else if(pa- pre=pa; pa=pa-e+pb-e) t-; pa-e+=pb- e

11、lse t=t-2;rheadi=pa-right=pa- p=pa; if(A-j=p)j=p-down=p- free(p); A-mu=A-muB-mu?mu:nu=A-nunu?nu:6.7十字链表的减法int SMatrix_jian(CrossList *A,CrossList *B) /十字链表相减e=-pb-e-pb-e-=pb-6.8十字链表的乘法int MultSMatrix_OL(CrossList M, CrossList N, CrossList &Q) /十字链表相乘 int i, j, e; OLink p0, q0, p, pl, pla; if(M.nu!=N

12、.mu)/检查稀疏矩阵M的列数和N的行数是否对应相等 printf( 稀疏矩阵A的列数和B的行数不相等,不能相乘。n ); Q.nu=N.nu; Q.tu=0; if(!(Q.rhead=(OLink*)malloc(Q.mu+1)*sizeof(OLink) exit(-2);(Q.chead=(OLink*)malloc(Q.nu+1)*sizeof(OLink) =Q.mu; Q.rheadi = NULL;i+) Q.cheadi=NULL;i+) /相乘 for(j=1; p0 = M.rheadi; q0 = N.cheadj; e = 0; while(p0&q0)/M第i行和N

13、第j列有元素 if( p0-j q0-i) q0 = q0- /M的列大于N的行,则N的列指针后移 else if(p0-j /M的列小于N的行,则M的行指针右移 else /M的行等于N的列 e += p0-e * q0- /乘积累加down, p0 = p0-/移动指针 if(e)/乘积不为0(p = (OLink)malloc(sizeof(OLNode) exit(-2); Q.tu+;/非零元素增加j=j;e=e;right=NULL;/赋值,指针后移,将p插入十字链表 行插入 if(Q.rheadi=NULL) /若p为该行的第1个结点 Q.rheadi=p =p; /p插在该行的

14、表头且pl指向p(该行的最后一个结点) pl-right=p,pl=p; /插在pl所指结点之后,pl右移 列插入 if(Q.cheadj = NULL) /若p为该列的第一个结点 Q.cheadj = p; /该列的表头指向p /插在列表尾 pla = Q.cheadj;/pla指向j行的第1个结点 while(pla-down) pla = pla-/pla指向j行最后一个结点 pla-down = p;return 1;7 系统测试首先进入VC+6.0,打开“稀疏矩阵应用.cpp”,编译后执行文件,按系统提示操作。7.1三元组的转置三元组的转置,实现。7.2 三元组的加法三元组的加法,实现。7.3 三元组的减法三元组的减法,实现。7.4 三元组的乘法三元组的乘法,实现

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1