三元组实现稀疏矩阵的相乘

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三元组实现稀疏矩阵的相乘

学院:

班级:

姓名:

学号:

一、实验题目:

建立三元组,并以三元组为储存结构储存两个稀疏矩阵,并实现他们的相乘,输出结果。

二、需求分析:

定义一个一维数组,它用来以行序为主序依次存放所有非零元构成的三元组,并定义变量分别记录矩阵的行数、列数非零元个数以及数组大小。按照这种方式定义三元组的数据实现两个稀疏矩阵的乘法操作。

三、概要设计:

建立一个三元组的结点:

struct Node

{

int Row,Col; // 三元组Á的行列号?

int Value; // 元素的值

};

用以储存稀疏矩阵,建立A和B两个稀疏矩阵用三元组表来储存非零元的行数、列数、值,再相乘输出结果。

四、详细设计:

建立三元组:

struct Node

{

int Row,Col; // 三元组Á的行列号?

int Value; // 元素的值

};

建立三元组表:

struct SparMatrix

{

int Rows,Cols; // 矩的行列数

int Terms; // 矩阵的非零元个数

struct Node arrayData[MAX_SIZE]; // 存放矩阵非零元素的三元组数组

void PrintMatrix(); // 输出矩阵

int GetElement(int m ,int n); // 获得矩阵对应的元素

void PrintInit(); // 矩阵的输初始化

void AddElement(int m,int n, int Value); // 增加非零元素

};

矩阵相乘:

SparMatrix* MatrixMulti(SparMatrix* pM1,SparMatrix* pM2);

void main()

{

SparMatrix matrix1;

cout<<"The 1st matrix:"<

matrix1.PrintInit();

SparMatrix matrix2;

cout<<"The 2nd matrix:"<

matrix2.PrintInit();

cout<<"Multiplication:"<

matrix1.PrintMatrix();

cout<<"*"<

matrix2.PrintMatrix();

cout<<"="<

SparMatrix* pMatrixPro;

pMatrixPro = MatrixMulti(&matrix1,&matrix2);

if (pMatrixPro == NULL)

{

cout<<"Error!"<

}

else

{

pMatrixPro->PrintMatrix();

}

if (pMatrixPro != NULL)

{

delete pMatrixPro;

pMatrixPro = NULL;

}

}

五、程序使用说明:

首先会看到“Please input the row and col num, using space to separate them:”的字样,这时候请输入你所要建立稀疏矩阵行数列数。敲回车出现“Please input the 1 element. * to end:”的字样,输入非零元的值敲回车出现“Then input the row and col of this element, using space to separate them:”,输入此非零元的行数、列数。输入完后敲“*”回车,再敲下一组矩阵。最后输出结果。

六、运行过程:

开始

建立一个4*4的矩阵

输入非零元

输入第二个矩阵重复上诉操作。

七、总结:

按照稀疏矩阵压缩存储的思想,当矩阵的阶数比较高时,为了节省存储空间,对于稀疏矩阵,没有必要使用专门的存储单元将大量的零元素存放起来,只需要存放非零元矩阵元素。为了记下矩阵元素之间的逻辑关系,若要存放一个非零矩阵元素,必须同时存放3个信息,即该元素的行数、列数、值。矩阵元素的这3个信息构成了一个三元组。一个非零元的三元组唯一确定了一个非零的矩阵元素,而稀疏矩阵可以由所有非零元组以及矩阵的行数和列数唯一确定。

相关文档
最新文档