稀疏矩阵Word文档格式.docx
- 文档编号:21325763
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:12
- 大小:68.48KB
稀疏矩阵Word文档格式.docx
《稀疏矩阵Word文档格式.docx》由会员分享,可在线阅读,更多相关《稀疏矩阵Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
5.运行与测试6
6.总结与心得7
参考文献:
7
1.概述
一般多数组矩阵占用的存储空间大。
稀疏矩阵能够节省很多矩阵结构的存储空间,所以我们需要设计一个稀疏矩阵。
2.系统分析
采用矩阵的压缩存储可以减少存储矩阵的空间:
即为多个值相同的元只分配一个存储空间;
对零元不分配存储空间,只需存储稀疏矩阵的非零元。
可以采用一个三元组(i,j,a)确定矩阵的非零元,由此,稀疏矩阵可由表示非零元的三元组及其行列数唯一确定。
按照稀疏矩阵的三元组实现矩阵的输入输出,相加,相乘的基本操作。
3.概要分析
3.1稀疏矩阵的存储
算法如下:
(1)一个稀疏矩阵A【m】【n】,与A对应生成的数组B【50】;
(2)for(i<
0;
i<
m;
i++)
for(j=0;
j<
n;
j++)
矩阵A不为0;
把A的序列给B;
把A的对应的数给B;
(3)把-1给B;
3.2稀疏矩阵的加法
(1)建立一个循环while(A不结束且B不结束)
(2)如果A和B的行和列都相等
把A的行和列都赋给C(k)C(k+1);
把A和B的数值之和赋给C(k+2)
(3)如果A的列小于B的列,将A的三个元素直接存入C中;
(4)如果B的列小于A的列,将B的三个元素直接存入C中;
(5)如果A的行小于B的行,将A的三个元素直接存入C中;
(6)如果B的行小于A的行,将B的三个元素直接存入C中;
(7)如果A结束B还没结束,将A的三个元素直接存入C中;
(8)如果B结束A还没结束,将B的三个元素直接存入C中;
3.3主函数的设计
算法如下:
(1)定义矩阵E[][],F[][];
(2)输入E矩阵和F矩阵的所有元素的值;
(3)输出A数组的内容,输出B数组的内容,输出C数组的内容;
4.详细设计
4.1稀疏矩阵的存储
voidCreateMatrix(intA[m][n],intB[50])
{
inti,j,k=0;
for(i=0;
for(j=0;
j++)
if(A[i][j]!
=0)
{
B[k]=i;
k++;
B[k]=j;
B[k]=A[i][j];
k++;
}
B[k]=-1;
}
4.2稀疏矩阵的加法
voidMatrixAdd(intA[max],intB[max],intC[max])
inti=0,j=0,k=0;
while(A[i]!
=-1&
&
B[j]!
=-1)
{
if(A[i]==B[j])
{
if(A[i+1]==B[j+1])
{
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2]+B[j+2];
k=k+3;
i=i+3;
j=j+3;
}
elseif(A[i+1]<
B[j+1])
C[k+2]=A[i+2];
else
C[k]=B[j];
C[k+1]=B[j+1];
C[k+2]=B[j+2];
}
elseif(A[i]<
B[j])
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2];
k=k+3;
i=i+3;
else
C[k]=B[j];
C[k+1]=B[j+1];
C[k+2]=B[j+2];
j=j+3;
}
if(A[i]==-1)
while(B[j]!
while(A[i]!
C[k]=A[i];
i=i+3;
C[k]=-1;
4.3主函数的设计
voidmain()
intE[m][n],F[m][n],A[max],B[max],C[max];
inti,j,k;
printf("
输入稀疏矩阵E:
(%d,%d):
\n"
m,n);
scanf("
%d"
&
E[i][j]);
输入稀疏矩阵F:
F[i][j]);
CreateMatrix(E,A);
CreateMatrix(F,B);
MatrixAdd(A,B,C);
i=0;
j=0;
k=0;
A数组内容如下:
\n"
);
{
printf("
%5d,%5d,%5d\n"
A[i],A[i+1],A[i+2]);
B数组内容如下:
while(B[j]!
B[j],B[j+1],B[j+2]);
j=j+3;
C数组内容如下:
while(C[k]!
C[k],C[k+1],C[k+2]);
k=k+3;
5.运行与测试
6.总结与心得
在这次实验中我充分的理解了矩阵的存储方式,掌握了稀疏矩阵的转换过程以及它的每种不同情况下的转换方式。
在这个过程中,我们还理解了稀疏矩阵的加法的实现方式,以及它的输出过程。
本次实验使我对函数的加法有个一个很清晰地认识,知道了加法的实现过程,以及加法在实现过程中的细节。
#include<
stdio.h>
#definem6//用户可根据需要定义原始矩阵行数
#definen8//定义原始矩阵列数
#definemax50
//非零元素存储的结束
voidMatrixAdd(intA[max],intB[max],intC[max])
{//行相等
{//且列相等
{//A的列小于B的列,将A的三个元素直接存入C中
{//B的列小于A的列,将B的三个元素直接存入C中
{//A的行小于B的行,将A的三个元素直接存入C中
{//B的行小于A的行,将B的三个元素直接存入C中C[k]=B[j];
}//循环结束
{//A结束,B还有元素,将B的所有元素直接存入C中
{//B结束,A还有元素,将A的所有元素直接存入C中
voidmain()
j++)//输入E矩阵所有元素值
j++)//输入F矩阵所有元素值
//E矩阵的非零元素存储到一维数组A中
//F矩阵的非零元素存储到一维数组B中
//A、B相加存入C
{//输出A中的内容
{//输出B中的内容
{//输出C中的内容
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 稀疏 矩阵