稀疏矩阵的转置

本文探讨了如何使用线性表存储稀疏矩阵以节省空间,并介绍了在转置过程中如何通过附设的colsize和rowNext数组确定非零元素的位置,确保高效地构建转置矩阵。通过colSize记录每列非零元素个数,rowNext记录每行首个非零元素在转置矩阵中的索引,实现了从原矩阵到转置矩阵的转换。
摘要由CSDN通过智能技术生成

看到矩阵第一联想是二维数组。用二维数组来存放此矩阵中的元素比如:int text[][5] = { {0,5,6,0,4},{0,0,0,0,0},{1,0,0,0,0},{1,0,0,0,0},{0,2,0,0,1}};

这行×列的方法,对于稀疏矩阵的存储与表示来说,功能没问题只是空间上开销的确有点奢侈。

如果我们只存储稀疏矩阵中的仅有的几个元素,可以节省一部分内存空间,所以可以舍弃二维数组的存储方式改为采用线性表存储;同时注意线性表存储的不只是元素本身的数字value,还要有此元素的行列值rows和cols来达到明确矩阵形态+定位的目的。三个属性,三元组的思想;

要想扫描一次 a 就能得到 b,必须每次扫描到一个三元组就直接将其放到 b 中相应的位置上,因此,需要知道 a 中的元素在 b 中的存储位置,这就要预先确定矩阵 A 的每一列的第一个非 0 元素在 b 中相应的位置。为此,需要附设两个数组,colsize和rowNext,分别用于存储矩阵 A 中每一列的非 0 元素个数和矩阵 A 中每一列第 1 个非0 元素在 b 中的存储位置。

在这里插入图片描述

rowNext[i]转置矩阵第i行首个非0元素在b中的索引这句话的理解:b是转置以后的矩阵的线性表,以上图为例,比如说6放在索引为0的位置上,5就放在索引为2的位置上,因为6和5中间有个4,以此类推

上图中colSize[1:8]=[0,2,1,2,1,1,1,1] rowNext[1:8]=[0,0,2,3,5,6,7,8]

显然,有如下的公式成立:

rowNext[1]=0;
rowNext[col] = rowNext[col - 1] + colsize[col -1],col 取大于等于 1 且小于 n 的数

template <class T>
  void sMatrix <T> :: transpose(sMatrix<T> &b){
   
//转置方法代码实现
//b是传进来的待转置矩阵

      //设置转置后的矩阵的特征
   
       b.co
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chi Z犬里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值