稀疏矩阵运算报告.docVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
稀疏矩阵运算报告

数据结构作业报告 ——稀疏矩阵运算报告 姓名: 班级: 学号: 摘要 利用三元数组随机生成并建立和输出矩阵,在利用法则进行矩阵的加减乘等运算。为了计算方便,这里的矩阵都是稀疏矩阵,利用三元数组进行存储。通过这个我熟悉了稀疏矩阵。 程序主要包括随机生成矩阵,输出矩阵,矩阵加法,矩阵减法,矩阵乘法五个子函数。 内容 M,N为存贮参与运算的稀疏矩阵的三元组表,m,n为存贮参与运算的稀疏矩阵的二维数组。Num二维数组用来存贮满矩阵算法的运算结果,Q三元组表用力存贮稀疏矩阵运算算法的运算结果。 CreateM、CreateN函数生成随机矩阵。通过从键盘输入参与运算的矩阵的行数、列数、非零元个数,通过rand函数随机选择矩阵的行列,填入随机数值生成稀疏矩阵。在首先是用二维数组存贮矩阵后,按先行后列的顺序遍历矩阵的每一个元素,取出其中的非零元存贮进三元组表中。 Add函数为稀疏矩阵的加法和满矩阵的加法。稀疏矩阵的加法,是通过设置两个指针变量,分别指向M和N三元组的第一个非零元,不断比较两个指针变量所指向的非零元的行数、列数信息,将情况分为两个非零元的行列相等,行相等但列数MN,行相等但列数MN,列相等但行数MN, 列相等但行数MN等几种情况,分别将指针变量所指向的非零元的数值或相加放入Q中存贮,或直接放入Q中存贮.然后再根据不同的情况,分别将两个指针变量指向下一个非零元。满矩阵加法算法不再赘述。 Sub函数为稀疏矩阵的减法和满矩阵的减法。过程与加法函数基本相当,这里不再赘述。 Mult函数为稀疏矩阵的乘法和满矩阵的乘法。稀疏矩阵的乘法是使用了带行逻辑信息的三元组的方法,即每次循环从左边的稀疏矩阵中每行的第一个非零元(从rops值中可以直接获知)到每行的最后一个非零元(从下一行的rops值可以获知),依次乘以右边的稀疏矩阵中每一列相对应的非零元,然后按行列信息依次存贮进Q中。依次去边M矩阵的每一行和N矩阵的每一列后,Q中即存储了矩阵相乘的结果。满矩阵的乘法算法不再赘述。 PrintMatrix函数为输出函数。设置双重循环遍历矩阵的各行各列,若在三元数组中存在该行该列的非零元,则输出该非零元,否则输出零。 程序执行结果 第一次运行结果: 第二次运行结果: 第三次运行结果: 备注:为了截图方便,程序输出的排版尽量紧凑了点。 结论 本程序思路基本正确,运行结果合法的,可以满足稀疏矩阵的加减乘及检验的作用。 编程中遇到的问题以及解决方法 1.函数多次在乘法中崩溃,后发现是生成矩阵时未输入rops值,补充每行的rops值后即可。 2.三元组表形式的稀疏矩阵无法正确的转换成矩阵的形式输出,后发现是三元组表中的数据非有序导致。改变生成矩阵的方法,先填充二维数组再转换成三元组表即可。 附录 #include stdafx.h #include stdio.h #include time.h #include stdlib.h int m[1000][1000],n[1000][1000],num[1000][1000]; typedef struct{ int i,j; int e; }Triple; typedef struct { Triple data[10000]; int rpos[10000]; int mu,nu,tu; }Matrix; void CreateM(Matrix *T) { int k,i1,j1,rop; printf( \n请输入矩阵行数、列数及非零元个数: ); scanf(%d%d%d,T-mu,T-nu,T-tu); printf(\n); for (i1=0;i1T-mu;i1++) for (j1=0;j1T-nu;j1++)m[i1][j1]=0; for (k=1;k=T-tu;) { i1=rand()%T-mu; j1=rand()%T-nu; if (m[i1][j1]==0) { m[i1][j1]=1+rand()%10; k++; } } k=1; for (i1=0;i1T-mu;i1++) { rop=0;T-rpos[i1]=T-tu+1; for (j1=0;j1T-nu;j1++) { if (m[i1][j1]!=0) { if (rop==0){T-rpos[i1]=k;printf(k=%d ,k);} T-data[k].i=i1; T-data[k].j=j1; T-data[k].e=m[i1][j1

文档评论(0)

wyjy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档