稀疏矩陣: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...