C++ 實現(xiàn)稀疏矩陣的壓縮存儲的實例
稀疏矩陣:M*N的矩陣,矩陣中有效值的個數(shù)遠小于無效值的個數(shù),且這些數(shù)據(jù)的分布沒有規(guī)律。  
稀疏矩陣的壓縮存儲:壓縮存儲值存儲極少數(shù)的有效數(shù)據(jù)。使用{row,col,value}三元組存儲每一個有效數(shù)據(jù),三元組按原矩陣中的位置,以行優(yōu)先級先后順序依次存放。
實現(xiàn)代碼:
#include <iostream> #include <vector> using namespace std;  template<class T> struct Triple    //三元組 {   size_t _row;  //行   size_t _col;  //列   T _value;  //值    Triple(size_t row, size_t col, const T& value)     :_row(row)     , _col(col)     , _value(value)   {} };   template<class T> class SparseMatrix   //稀疏矩陣 { protected:   vector<Triple<T>> _matrix; //可以實現(xiàn)動態(tài)增容的壓縮矩陣   size_t _m;  //行   size_t _n;  //列   T _invalid;   //默認值  public:   SparseMatrix(T* a, size_t m, size_t n, const T& invalid= T())     :_m(m)     , _n(n)     , _invalid(invalid)   {     for (size_t i = 0; i < m; ++i)     {       for (size_t j = 0; j < n; ++j)       {         Triple<T> t(i, j, a[i*n + j]);         _matrix.push_back(t);       }     }   }    void Display()   {     size_t index = 0;     for (size_t i = 0; i < _m; ++i)     {       for (size_t j = 0; j < _n; ++j)       {         if (index < _matrix.size()           && _matrix[index]._row== i           &&_matrix[index]._col ==j)         {           cout << _matrix[index]._value << " ";           ++index;         }         else         {           cout << _invalid << " ";         }       }       cout << endl;     }     cout << endl;   }    }; #include <windows.h>  void test() {   int a[6][5] =   {     { 1, 0, 2, 0, 0 },     { 1, 0, 1, 0, 3 },     { 2, 0, 0, 1, 2 },     { 3, 0, 1, 0, 0 },     { 4, 0, 2, 0, 0 },     { 0, 3, 4, 0, 0 },   };    SparseMatrix<int> sm((int*)a, 6, 5, 0);   //SymmetricMatrix(int a[][N], size_t N)   sm.Display();  }   int main() {   test();    system("pause");   return 0; } 以上就是稀疏矩陣的壓縮存儲的實例詳解,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答