(重新放入源代码)稀疏矩阵压缩存储及转置,加法运算(采用三元表)


一、        实验环境

VC6.0,

 二、        实验目的

 输入任意两个稀疏矩阵进入三元表,求出其加法运算后的矩阵,转置矩阵,输出矩阵。

 三、        实验内容

1用C语言实现稀疏矩阵的三元组存储结构 ;

2实现稀疏矩阵的矩阵输入、矩阵输出等算法;

3.利用三元组存储结构解决稀疏矩阵的运算问题(稀疏矩阵的转置、稀疏矩阵的加法等) 。

 

四、        数据结构与算法思想描述

    用三元表实现的。采用结构体表示三元表,三元组表。

(1)创建稀疏矩阵,以行优先顺序存放,用户只需输入稀疏矩阵非零元素的个数,及其具体坐标,值。就能依次放入三元表中,

(2)两个稀疏矩阵相加,首先遍历A,将值全部放入C里,同样,B也放入C里。

循环A,B。如果两矩阵存在坐标相同的点则相加之后更改C中同样位置的值。

(3) 稀疏矩阵的转置,将A的行列数互换再赋值给D。遍历a,将元素值的横纵坐标互换,元素值不变,赋值到d.的三元表组里面。

(4) 输出稀疏矩阵,建立一个数组,大小最大为【10】【10】,全部赋值为0,在遍历三元表,当行列存在时,将三元表的元素值赋值到数组里。在逐个输出数组。



#include<stdio.h&
  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
稀疏矩阵压缩存储方式是一种常用的优化存储方式,可以有效节省存储空间。在这种存储方式中,矩阵中的非零元素被存储为一个三元组 (i, j, value) 的形式,其中 i 和 j 分别示该元素在矩阵中的行坐标和列坐标,value 示该元素的值。 转置操作是指将矩阵的行和列交换,即行变为列,列变为行。在稀疏矩阵压缩存储方式中,转置操作需要重新生成一个新的三元组数组来存储转置后的矩阵。 以下是稀疏矩阵压缩存储转置算法的详细解释。 1. 定义一个三元组结构体来存储稀疏矩阵三元组信息: ``` typedef struct { int row; // 行坐标 int col; // 列坐标 int value; // 元素值 } Triple; ``` 2. 定义一个稀疏矩阵结构体来存储稀疏矩阵的基本信息,包括矩阵的行数、列数、非零元素个数和三元组数组: ``` typedef struct { int rows; // 矩阵的行数 int cols; // 矩阵的列数 int nnz; // 矩阵的非零元素个数 Triple *triples; // 矩阵的三元组数组 } SparseMatrix; ``` 3. 定义一个稀疏矩阵转置的函数,该函数接受一个稀疏矩阵作为参数,并返回转置后的稀疏矩阵: ``` SparseMatrix transpose(SparseMatrix A) { SparseMatrix B; B.rows = A.cols; B.cols = A.rows; B.nnz = A.nnz; B.triples = (Triple *)malloc(B.nnz * sizeof(Triple)); int *rowCounts = (int *)calloc(A.cols, sizeof(int)); for (int i = 0; i < A.nnz; i++) { rowCounts[A.triples[i].col]++; } int *rowOffsets = (int *)calloc(A.cols + 1, sizeof(int)); rowOffsets[0] = 0; for (int i = 1; i <= A.cols; i++) { rowOffsets[i] = rowOffsets[i - 1] + rowCounts[i - 1]; } for (int i = 0; i < A.nnz; i++) { int j = A.triples[i].col; int index = rowOffsets[j]; B.triples[index].row = A.triples[i].col; B.triples[index].col = A.triples[i].row; B.triples[index].value = A.triples[i].value; rowOffsets[j]++; } free(rowCounts); free(rowOffsets); return B; } ``` 4. 在转置函数中,首先定义一个新的稀疏矩阵 B,该矩阵的行数等于 A 的列数,列数等于 A 的行数,非零元素个数等于 A 的非零元素个数。 5. 然后,定义两个辅助数组 rowCounts 和 rowOffsets,用于计算转置后的矩阵的三元组数组的索引。 6. 对于 rowCounts 数组,它的长度为 A 的列数,每个元素示该列中的非零元素个数。遍历 A 的三元组数组,在 rowCounts 数组中对应的列上加 1。 7. 对于 rowOffsets 数组,它的长度为 A 的列数加 1,每个元素转置后的矩阵的三元组数组中该列的起始索引。遍历 rowCounts 数组,累计计算 rowOffsets 数组中每个元素的值。 8. 遍历 A 的三元组数组,根据 rowOffsets 数组中的值,将转置后的三元存储到 B 的三元组数组中。 9. 最后,释放 rowCounts 和 rowOffsets 数组,并返回转置后的稀疏矩阵 B。 以上就是稀疏矩阵压缩存储转置算法的详细解释。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值