C 實現稀疏矩陣的壓縮儲存例項

2022-10-04 01:00:15 字數 2465 閱讀 7643

什麼是稀疏矩陣呢,就是在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...