稀疏矩陣的轉置

2021-07-12 03:24:52 字數 1600 閱讀 6237

稀疏矩陣:m*n的矩陣,矩陣中有效值的個數遠小於無效值的個數,且這些資料的分布沒有規律

如下圖所示:

一般情況下,我們會想到只要交換對應的行和列,但是這種做法很浪費時間和空間,所以我們可以利用三元組進行儲存,壓縮儲存極少數的有效資料,使用三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序先後順序依次存放。

templatestruct triple  //定義三元組

triple()

:_row(0)

, _col(0)

, _value(0)

{}};

templateclass sparsematrix

}} }

sparsematrix(size_t rowsize, size_t colsize, t invaild)

:_rowsize(rowsize),

_colsize(colsize),

_invaild(invaild)

{} void display(t* a, int m, int n, const t& invalid)  //列印稀疏矩陣

else

}cout <

} }sparsematrixtransport()  //逆轉矩陣

++index;

}} return sm;

} sparsematrixfasttransport()   //快速轉置

rowstarts[0] = 0;

for (size_t i = 0; i 

while (index 

delete _a;

return tmp;

} protected:

size_t _rowsize;

size_t _colsize;

t _invaild;

vector> _a;

};測試**如下:

void test()

, ,

, ,

, }; sparsematrixd((int*)a, 6, 5, 0);

sparsematrixtmp = d.transport();

cout <

d.display((int*)a, 6, 5, 0);

cout <

cout <

tmp.display((int*)a, 5, 6, 0);

}int main()

執行結果如下:

本文出自 「零點時光」 部落格,請務必保留此出處

稀疏矩陣轉置

輸出稀疏矩陣的轉置矩陣。行列均不大於20 第一行輸入兩個正整數n和m,分別表示矩陣的行數和列數,然後輸入矩陣三元組,最後輸入 0 0 0 表示結束輸入。轉置後的矩陣。include include define maxsize 100 typedef struct triple typedef st...

稀疏矩陣轉置矩陣

num 矩陣a中某列的非零元素的個數 cpot 初值表示矩陣a中某列第乙個非零元素在b中的位置,並有如下遞推 cpot 1 0 cpot col cpot col 1 num col 1 2 col nu end right.const int maxterm 100 struct sparsema...

稀疏矩陣的轉置

稀疏矩陣的轉置 使用了兩個輔助陣列 num num j 矩陣a中第j列非零元素的個數 cpot cpot j 矩陣a中第j列的第乙個非零元素在其轉置矩陣b的三元組順序表的位置。推出2個規則 1 cpot 1 1 2 cpot j cpot j 1 num j 1 演算法思路 根據1,2規則計算num...