稀疏矩阵的转置与快速转置

本文探讨了稀疏矩阵的转置方法,包括基本的转置操作和优化后的快速转置策略。在转置过程中,矩阵的行列值互换,通过遍历原矩阵的每一列找到有效值,并在转置矩阵中对应位置存储。快速转置通过额外的数组记录每行有效值数量和起始位置,以提高效率。
摘要由CSDN通过智能技术生成

  假设在m*n的矩阵中,有t个元素不为0。令稀疏因子s=t/(m*n),通常认为s<0.05时称为稀疏矩阵。

 有时为了节省存储空间,可以对这类矩阵进行压缩存储。所谓的压缩存储就是,为多个相同的值分配存储在一个空间,对零元不分配空间。而稀疏矩阵是只存储有效值,无效值只分配一个空间。

  在这里我们用一个顺序表vector存储稀疏矩阵的有效值的行,列,值三个元素。

struct Triple
{
	int _cow;
	int _col;
	T _value;
	Triple(int cow,int col,T value)
		:_cow(cow)
		, _col(col)
		, _value(value)
	{}
	Triple()
		:_cow(0)
		, _col(0)
	{

	}
};
class SparseMatrix
{
public:
	SparseMatrix(T* a, int m, int n, const T& invalid)
		:_cow(m)
		, _col(n)
		, _invalue(invalid)
	{
		for (int i = 0; i < m; ++i)
		{
			for (int j = 0; j < n; ++j)
			{
				if (a[i*n + j] != invalid)
				{
					Triple<T> tmp(i, j, a[i*n + j]);
					_a.push_back(tmp);
				}
			}
		}
	}
protected:
	vector<Triple<T>> _a;
	int _cow;//矩阵行数
	int _col;//矩阵列数
	T _invalue;//无效值
};</
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值