什麼是稀疏矩陣呢,就是在m*n的矩陣中,有效值的個數遠小於無效值的個數,並且這些資料的分布沒有規律。在壓縮儲存稀疏矩陣的時候我們只儲存極少數的有效資料。我們在這裡使用三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序先後次序依次存放。下面我們來看一下**實現。
#include
#include
#include
using namespace std;
template程式設計客棧 t>
class sparsematrix
trituple(size_t row, size_t col, const t& data)
:_row(row)
,_col(col)
,_data(data)
{} size_t _row;
size_t _col;
t _data;
}; public:
//稀疏矩陣的壓縮儲存
sparsematrix()
{} sparsematrix(int* arr, size_t row, size_t col, const t& invalid)
:_row(row)
,_col(col)
,_invalid(invalid)
}
} //訪問稀疏矩陣中row行col中的元素
t& acess(int row, int col)
return _invalid;*/ //否則返回無效值
//2、
vector>::iterator it = _sm.begin();//定義乙個迭代器,指向起始位置
while(it != _sm.end())//未到最後乙個元素時
return _invalid;
} //還原稀疏矩陣
template
friend ostream& operator&lwww.cppcns.comt;& s)//過載<<
} return sm;
} //實現稀疏矩陣的快速轉置 時間複雜度o(n)+o(m)
sparsematrix fasttransport()
//3、放置元素到新空間
for(int i = 0; i < _sm.size(); i++)
return sm;
} //實現稀疏矩陣的加法操作1
/*sparsematrix operator+(const sparsematrix& sp)
else if(this->_sm[i]._col > sp._sm[j]._col)
else
i++;
j++;
} }
else if(this->_sm[i]._row < sp._sm[j]._row)
else
} return s;
}*/
//實現稀疏矩陣的加法操作2
sparsematrix operator+(const sparsematrix& sp)
else if(addrleft > addrright)
else//當左邊等於右邊判斷相加後和是否為0,不為0放入
} }
while(ilidx < _sm.size())//左邊還有剩餘則放入剩餘元素
while(iridx < sp._sm.size())
return ret;
} private:
size_t _row;
size_t _col;
vector> _sm;
t _invalid;//無效值
};
int main()
, ,
, ,
, };
int arr1[6][5] = ,
, ,
, ,
}; sparsematrix s((int*)arr,6,5,0);
sparsematrix s1((int*)arr1,6,5,0);
cout<
執行結果截圖:
在上面的**中用到c++模板、標準庫中vector容器,以及迭代器實現了一些基本的操作,如訪問稀疏矩陣中某個元素,輸出稀疏矩陣、稀疏矩陣的轉置以及快速轉置還有兩個稀疏矩陣的加法。
快速轉置操作的基本思路是:
(1)統計原矩陣中每一列有多少個有效元素;
(2)原矩陣中每一列在新矩陣中的起始位址;
(3)放置元素到新空間中。
還需注意的是,在我們列印這個稀疏矩陣時雖然也可以直接呼叫訪問元素的acess介面,但是每次進去之後都得遍歷一遍,時間複雜度較高,所以我們不採取這種辦法,而是比較當前行列的值,若相等輸出有效元素,不等則輸出無效元素0。
本文標題: c++實現稀疏矩陣的壓縮儲存例項
本文位址: /ruanjian/c/193294.html
稀疏矩陣壓縮儲存(C語言實現)
在乙個矩陣中,如果非0元素遠遠少於0元素,那麼這個矩陣就是稀疏矩陣,在實際應用中,計算機會耗費大量的空間儲存這些無意義的0元素,如果能夠壓縮一下,將會減少計算機的開銷。本篇文章以五子棋的棋局儲存為背景,用c語言實現原始稀疏矩陣轉換為壓縮矩陣並且儲存為檔案,棋局覆盤則讀取檔案將壓縮矩陣轉換為原始稀疏矩...
稀疏矩陣的壓縮儲存
include include using namespace std templateclass sparsematrix sparsematrix 訪問稀疏矩陣中row行col中的元素 t access int row,int col it return invalid for size t i...
稀疏矩陣的壓縮儲存
稀疏矩陣的壓縮儲存 實現稀疏矩陣壓縮儲存,並實現矩陣轉置和求和。輸入矩陣時,首先需要輸入非零元素的個數,然後分別輸入矩陣的 行號,列號和值。輸完2個矩陣後,自動進行計算第乙個矩陣的轉置以及兩個矩陣的和。例如 輸入如下 100 90 5 矩陣的行數為100,列數為90,共5個非零元素。1 10 100...