假设在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;//无效值
};
</