C++ 数据结构之对称矩阵及稀疏矩阵的压缩存储数据结构之对称矩阵及稀疏矩阵的压缩存储
对称矩阵及稀疏矩阵的压缩存储
1.稀疏矩阵稀疏矩阵
对于那些零元素数目远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称为稀疏矩阵(sparse)。
人们无法给出稀疏矩阵的确切定义,一般都只是凭个人的直觉来理解这个概念,即矩阵中非零元素的个数远远小于矩阵元
素的总数,并且非零元素没有分布规律。
实现代码:实现代码:
//稀疏矩阵及其压缩存储
#pragma once
#include <vector>
#include <iostream>
using namespace std;
template<class T>
struct Triple
{
size_t _r;
size_t _c;
T _value;
Triple(size_t row = 0, size_t col = 0, const T& value = T())
:_r(row)
,_c(col)
,_value(value)
{}
};
template <class T>
class SparseMatrix
{
public:
SparseMatrix()
:_row(0)
,_col(0)
,_illegal(T())
{}
SparseMatrix(T* arr, size_t row, size_t col, const T& illegal)
:_row(row)
,_col(col)
,_illegal(illegal)
{
for(size_t i = 0; i<row; ++i)
{
for(size_t j = 0; j<col; ++j)
{
if(arr[i*col+j] != illegal)
{
Triple<T> t(i,j,arr[i*col+j]);
_matrix.push_back(t);
}
}
}
}
void Display()
{
vector<Triple<T> >::iterator iter;
iter = _matrix.begin();
for(size_t i = 0; i<_row; ++i)
{