C++ 實(shí)現(xiàn)稀疏矩陣的壓縮存儲(chǔ)的實(shí)例
C++ 實(shí)現(xiàn)稀疏矩陣的壓縮存儲(chǔ)的實(shí)例
稀疏矩陣:M*N的矩陣,矩陣中有效值的個(gè)數(shù)遠(yuǎn)小于無(wú)效值的個(gè)數(shù),且這些數(shù)據(jù)的分布沒(méi)有規(guī)律。
稀疏矩陣的壓縮存儲(chǔ):壓縮存儲(chǔ)值存儲(chǔ)極少數(shù)的有效數(shù)據(jù)。使用{row,col,value}三元組存儲(chǔ)每一個(gè)有效數(shù)據(jù),三元組按原矩陣中的位置,以行優(yōu)先級(jí)先后順序依次存放。
實(shí)現(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; //可以實(shí)現(xiàn)動(dòng)態(tài)增容的壓縮矩陣
size_t _m; //行
size_t _n; //列
T _invalid; //默認(rèn)值
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;
}
以上就是稀疏矩陣的壓縮存儲(chǔ)的實(shí)例詳解,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的通訊錄
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
VC6.0如何創(chuàng)建以及調(diào)用動(dòng)態(tài)鏈接庫(kù)實(shí)例詳解
作為客戶(hù)與后臺(tái)的中介,為了更好的調(diào)節(jié)兩方的關(guān)系,我明智滴選擇了webservice以及動(dòng)態(tài)鏈接庫(kù)。在與客戶(hù)c++使動(dòng)態(tài)鏈接庫(kù)方式,而與后臺(tái)java,使用webservice來(lái)交流溝通2013-01-01
QT實(shí)現(xiàn)簡(jiǎn)單時(shí)鐘效果
這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)簡(jiǎn)單時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
Ubuntu中使用VS Code與安裝C/C++插件的教程詳解
這篇文章主要介紹了Ubuntu中使用VS Code與安裝C/C++插件的教程詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09

