資料結構 稀疏矩陣

2021-07-11 06:42:55 字數 1736 閱讀 8807

稀疏矩陣:矩陣中有效資料的個數遠遠小於無效資料的個數,則可以稱之為稀疏矩陣

如果還像以前那樣將每個稀疏矩陣的資料都儲存起來,則會造成記憶體的很大程度的浪費,所以應用特別的儲存方式。

稀疏矩陣的壓縮儲存: 使用

三元組儲存每乙個有效資料,三元組按原矩陣中的位置,

以行優先順序先後順序依次存放。

矩陣的轉置:將矩陣上行列互換,原來的a[i][j]就等於現在的a[j][i] .

矩陣的快速轉置:                                 

建立rowcounts和rowstart, 統計每列的個數和每列起始位置,

第i行的起始位置等於上一行的起始位置加上上一行的個數。

#pragma once

#include//稀疏矩陣

templatestruct triple

};template class sparsematrix

//a為陣列 m行 n列 invalid為非法值

sparsematrix(t*a, size_t m, size_t n, const t& invalid)

:_rowsize(m)

, _colsize(n)

, _invalid(invalid)

}} }

void print()

else

}cout << endl;

} cout << endl;

} sparsematrixtransport()

++index;

}} return tmp;

} //快速轉置的思想:建立rowcounts和rowstart, 統計每列的個數和每列起始位置,

//第i行的起始位置等於上一行的起始位置加上上一行的個數。

sparsematrixfasttransport()

rowstart[0] = 0;

for (size_t i = 1; i < _colsize; i++)

//快速轉置

size_t index = 0;

tripletmp;

while (index < _a.size())

return result;

}protected:

/*triple* _a;

size_t size;*/

vector> _a;

size_t _rowsize; //行

size_t _colsize; //列

t _invalid; //非法值

};void test()

, ,

, ,

, ,

}; sparsematrixsm1((int*)array, 6, 5, 0);

sm1.print();

sparsematrixsm2 = sm1.transport();

sm2.print();

sparsematrixsm3 = sm1.fasttransport();

sm3.print();

}

如有不正確的地方,希望能夠指出,一起學習進步,o(∩_∩)o謝謝了。

資料結構 稀疏矩陣

簡單的說,設矩陣amn中有s個非零元素,若s遠遠小於矩陣元素的總數,則稱a為稀疏矩陣。s與m x n的比稱為矩陣的稀疏因子。當用陣列儲存稀疏矩陣中的元素時,僅有少部分的空間被利用,造成空間的浪費,為了節省儲存空間,可以採用一種壓縮的儲存方法來表示稀疏矩陣。由於非零元素的分布一般是沒有規律的,因此在儲...

資料結構 稀疏矩陣

稀疏矩陣時矩陣中的一種特殊情況,其非零元素的個數遠遠小於零元素個數。1.順序儲存 非零元素三元組的結構定義 struct triple 其中row代表行號,col代表列號,val用來儲存元素值 稀疏矩陣的順序儲存型別定義 struct smatrix m,n,t域分別用來儲存稀疏矩陣的行數,列數,非...

資料結構 (稀疏矩陣)

使用三元組儲存乙個稀疏矩陣,函式實現稀疏矩陣的輸入,稀疏矩陣的輸出,稀疏矩陣的轉置,兩個稀疏矩陣的加法 include include include using namespace std define m 10 define n 10 typedef int datatype typedef s...