国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ 實現(xiàn)稀疏矩陣的壓縮存儲的實例

2020-01-26 13:59:18
字體:
供稿:網(wǎng)友

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ū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 杭锦后旗| 香港 | 嵊州市| 肃北| 辽阳市| 吴堡县| 珠海市| 武邑县| 元阳县| 苗栗市| 江山市| 南昌县| 湖北省| 襄樊市| 巴南区| 咸阳市| 洛扎县| 沙洋县| 镇平县| 深州市| 工布江达县| 沙坪坝区| 七台河市| 荔浦县| 潞城市| 个旧市| 嘉义市| 惠安县| 东山县| 涟水县| 高唐县| 洛阳市| 邳州市| 乌鲁木齐县| 黄山市| 简阳市| 嘉定区| 三门峡市| 龙州县| 甘肃省| 大宁县|