C++ 實現(xiàn)稀疏矩陣的壓縮存儲的實例
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ū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
C語言函數(shù)調(diào)用底層實現(xiàn)原理分析
這篇文章主要介紹了C語言函數(shù)調(diào)用底層實現(xiàn)原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
聊聊C++中右值引用和移動構(gòu)造函數(shù)的使用
這篇文章主要是來和大家一起聊聊C++中右值引用和移動構(gòu)造函數(shù)的使用,文中通過示例進行了詳細講解,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-07-07
C語言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解分析
鏈表可以說是一種最為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)了,而單向鏈表更是基礎(chǔ)中的基礎(chǔ)。鏈表是由一組元素以特定的順序組合或鏈接在一起的,不同元素之間在邏輯上相鄰,但是在物理上并不一定相鄰。在維護一組數(shù)據(jù)集合時,就可以使用鏈表,這一點和數(shù)組很相似2021-11-11
C語言詳解熱門考點結(jié)構(gòu)體內(nèi)存對齊
C?數(shù)組允許定義可存儲相同類型數(shù)據(jù)項的變量,結(jié)構(gòu)是?C?編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲不同類型的數(shù)據(jù)項,本篇讓我們來了解C?的結(jié)構(gòu)體內(nèi)存對齊2022-04-04

