欢迎来到天天文库
浏览记录
ID:55493049
大小:51.00 KB
页数:11页
时间:2020-05-15
《题目 稀疏阵的相加.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、题目:稀疏矩阵的相加1、问题描述稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加运算。稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则以通常的阵列形式列出。2、设计2.1.存储结构设计稀疏矩阵的行逻辑连接的顺序表存储结构表示如下:#defineMAXSIZE20/*非零元个数最大值*/#defineMAXRC10/*各行第一个非零元总数最大值*/typedefstruct{inti,j;/*行下标,列下标*/i
2、nte;/*非零元值*/}Triple;typedefstruct{/*行逻辑链接的顺序表*/Tripledata[MAXSIZE+1];/*非零元三元组表,data[0]未用*/intrpos[MAXRC+1];/*各行第一个非零元的位置表*/intmu,nu,tu;/*阵的行数、列数和非零元个数*/}TSMatrix;2.2.主要算法设计对2个矩阵相加的算法如下:boolAddSMatrix(TSMatrixM,TSMatrixN,TSMatrix&Q)/*求稀疏矩阵的和Q=M+N*/{intp=1,q=1,k=1;if(M.tu==0&&N.tu==0)/*为空矩阵
3、的情况*/{cout<<"该矩阵为空矩阵"<N.data[q].i)/*M的行值比N的大取N的值*/{Q.data[k].i=N.data[q].i;Q.data[k].j=N.data[q]
4、.j;Q.data[k].e=N.data[q].e;k++;q++;}else/*M的行值和N一样大的情况*/{if(M.data[p].jN.data[q].j)/*M的列值比M的大取N的值*/{Q.data[k].i=N.data[q].i;Q.data[k].j=N.data[q].j;Q.data[k].e
5、=N.data[q].e;k++;q++;}else/*M和N的列值相等*/{if(M.data[p].e+N.data[q].e!=0)/*相加结果不为0才取M值*/{Q.data[k].i=M.data[q].i;Q.data[k].j=M.data[q].j;Q.data[k].e=M.data[q].e+N.data[p].e;k++;}p++;q++;}}}while(q<=N.tu)/*再看N矩阵,直接取N值*/{Q.data[k].i=N.data[q].i;Q.data[k].j=N.data[q].j;Q.data[k].e=N.data[q].e;k+
6、+;q++;}if(M.mu>N.mu)Q.mu=M.mu;/*Q的行和列的值取M,N的最大值*/elseQ.mu=N.mu;if(M.nu>N.nu)Q.nu=M.nu;elseQ.nu=N.nu;Q.tu=k-1;cout<<"相加成功"<7、错误了,运行的结果不正确。就是矩阵相加的结果部分不正确,初步断定算法写的有问题,就对该部分进行调试,设置断点到矩阵相加函数,执行到断点,输入测试用例后,开始观察各变量的值是否正常。刚开始就发现执行顺序有问题,才发现自己误把矩阵的三元表存储当成是数组的形式了,数组是从0开始而三元组是从1开始的,初值设置有问题,于是都设为1,程序运行后与期待结果接近了.但发现程序对于两个矩阵取同一位置时的值相加是否为0的细节处理的不是很好,于是重新作处理,程序结果才显示正确。3.2.对设计和编码的讨论和分析这次设计主要包括以下几个部分:稀疏矩阵的
7、错误了,运行的结果不正确。就是矩阵相加的结果部分不正确,初步断定算法写的有问题,就对该部分进行调试,设置断点到矩阵相加函数,执行到断点,输入测试用例后,开始观察各变量的值是否正常。刚开始就发现执行顺序有问题,才发现自己误把矩阵的三元表存储当成是数组的形式了,数组是从0开始而三元组是从1开始的,初值设置有问题,于是都设为1,程序运行后与期待结果接近了.但发现程序对于两个矩阵取同一位置时的值相加是否为0的细节处理的不是很好,于是重新作处理,程序结果才显示正确。3.2.对设计和编码的讨论和分析这次设计主要包括以下几个部分:稀疏矩阵的
此文档下载收益归作者所有