收藏 分享(赏)

稀疏矩阵的应用.doc

上传人:HR专家 文档编号:11586656 上传时间:2020-07-14 格式:DOC 页数:8 大小:213KB
下载 相关 举报
稀疏矩阵的应用.doc_第1页
第1页 / 共8页
稀疏矩阵的应用.doc_第2页
第2页 / 共8页
稀疏矩阵的应用.doc_第3页
第3页 / 共8页
稀疏矩阵的应用.doc_第4页
第4页 / 共8页
稀疏矩阵的应用.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、武 汉 工 程 大 学计算机科学与工程学院数据结构实验报告专业班级 实验地点 学生学号 指导教师 学生姓名 实验时间实验项目实验类别操作性()验证性( )设计性( )综合性(Y )其它( )实验目的及要求(1)掌握掌握稀疏矩阵的表示方法及其运算的实现;(2)实现稀疏矩阵在三元组、十字链表等表示下的各运算并分析其效率。成 绩 评 定 表类 别评 分 标 准分值得分合 计上机表现积极出勤、遵守纪律认真完成实验任务30分报告质量程序代码规范、功能正确填写内容完整、体现收获70分说明: 评阅教师: 日 期: 年 月 日稀疏矩阵的应用1、实验目的:(1)掌握掌握稀疏矩阵的表示方法及其运算的实现;(2)实

2、现稀疏矩阵在三元组、十字链表等表示下的各运算并分析其效率。2、实验内容在mn 的矩阵中,有t个非零元。令= t/(m*n),称矩阵的稀疏因子,常认为0.05时称为稀疏矩阵。稀疏矩阵在工程中有着大量的应用,不少工程问题都可以转化为对稀疏矩阵的计算问题。用三元组表实现稀疏矩阵的转置,用(顺序取,直接存)方法。3、实验说明:引入两个数组作为辅助数据结构: numnu:表示矩阵A中某列的非零元素的个数; cpotnu:初始值表示矩阵A中某列的第一个非零元素在B中的位置。 num与cpot递推关系:cpot0=0;cpotcol=cpotcol-1+numcol-1; 1colnu1.实验分析:在本次实

3、验当中,需要注意一下几个关键点:1. 设置转置后矩阵B的行数、列数和非零元素的个数;2. 计算A中每一列的非零元素个数;3. 计算A中每一列的第一个非零元素在B中的下标;4. 依次取A中的每一个非零元素对应的三元组;2.1 确定该元素在B中的下标pb;2.2 将该元素的行号列号交换后存入B中pb的位置;2.3 预置该元素所在列的下一个元素的存放位置;具体要定义如下若干个函数:void setup()初始化非零元的个数void transition()转置函数void input()输入函数void print1()输出函数void print2()输出函数2.源程序代码:#includeusi

4、ng namespace std;#include #define maxsize 50typedef int datatype;typedef struct int p,q;datatype x; List;typedef structint md,nd,td; tabletype;int n,m; /*稀疏矩阵的行数、列数*/ void input(datatype amaxsizemaxsize );void setup (datatype amaxsizemaxsize, List ta,tabletype *ta1 );void transition (tabletype *ta1,

5、 tabletype *tb1, List ta,List tb);void print1(datatype amaxsizemaxsize);void print2(List a,int nn);int main( ) datatype amaxsizemaxsize; /*稀疏矩阵*/List tamaxsize,tbmaxsize; /*三元组顺序表*/tabletype *ta1,*tb1;if (ta1=(tabletype *)malloc(sizeof(tabletype)=NULL) cout申请空间错误!n;return 0; if (tb1=(tabletype *)mal

6、loc(sizeof(tabletype)=NULL) cout申请空间错误!n;return 0; input(a);setup(a,ta,ta1);transition(ta1, tb1, ta,tb);coutn原稀疏矩阵为:n;print1(a );couttd);couttd);return 1; /*输入*/void input(datatype amaxsizemaxsize ) int i,j;coutn;coutm;for(i=0;in;i+)for(j=0;jaij;/*建立*/void setup (datatype amaxsizemaxsize, List ta, t

7、abletype *ta1) int i,j;ta1-td=0; /*初始化非零元素个数*/for(i=0; in;i+)for(j=0;jtd.p=i;tata1-td.q=j;tata1-td.x=aij;ta1-td+; ta1-md=n;ta1-nd=m; /*转置*/void transition (tabletype *ta1, tabletype *tb1, List ta,List tb) int i,j,nn=0;tb1-md=ta1-nd;tb1-nd=ta1-md;tb1-td=ta1-td;if(ta1-td!=0)for (i=0;ind;i+) /*i 原矩阵的列下

8、标*/for(j=0;jtd;j+) /*j 原三元组顺序表的下标*/ if(taj.q=i) /*寻找原矩阵中最小列下标*/ tbnn.p=taj.q;tbnn.q=taj.p;tbnn.x=taj.x;nn+; /*矩阵输出*/void print1(datatype amaxsizemaxsize) int i,j;for(i=0; in;i+) for(j=0;jm;j+)coutaij ;coutn; /*三元组顺序表输出*/void print2(List a,int nn) int i;coutt行号t列号t元素值n;for(i=0; inn;i+)cout ai.p ai.q ai.x n; coutn;实 验 内 容3.测试用例:1,当输入原稀疏矩阵为A33=2,0,3;1,0,4;0,0,1时程序运行结果如下:2.当输入稀疏矩阵为A22=1,0;0,2时运行结果如下:实 验 内 容实 验 总 结4.实验总结:针对稀疏矩阵的压缩存储应用,通过本次实验对它有一定的系统了解,在这次实验的的过程当中起初有很多问题比较疑惑,甚至根本动不了手,但是通过资料的查询,以及向同学的请教,这些问题很快就解决掉了,通过对稀疏矩阵的三元组存储方式省掉了系统的很多空间,也提高了效率,这对日后的编程打下了一定的基础。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 高中教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报