您好,登錄后才能下訂單哦!
對稱矩陣:
設(shè)一個N*N的方陣A,A中任意元素Aij,當(dāng)且僅當(dāng)Aij == Aji(0 <= i <= N-1 && 0 <= j <= N-1),則矩陣A是對稱矩陣。以矩陣的對角線為分隔,分為上三角和下三角。
如下面矩陣:
對稱矩陣壓縮存儲時只需要存儲i*(i+1)/2個數(shù)據(jù)。
對稱矩陣與壓縮矩陣的關(guān)系是:
對稱矩陣SymmetricMatrix[i][j] =壓縮矩陣Array(i*(i+1)/2+j)。
下面我實現(xiàn)一下對稱矩陣存儲在壓縮矩陣以及將壓縮矩陣中的元素還原成對稱矩陣打印出來的代碼。
代碼如下:
#include<iostream> using namespace std; template<class T> class SymmtrixMatrix { public: SymmtrixMatrix(T* a, size_t size) :_a(new T[size*(size+1)/2]) , _size(size*(size + 1) / 2) { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (i >= j) { //將對稱矩陣轉(zhuǎn)換為壓縮矩陣 _a[i*(i + 1) / 2+j] = a[i*size+j]; } } } } //壓縮矩陣的訪問打印 void Print(size_t size) { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { int row = i; int col = j; if (row < col) { swap(row, col); } cout << _a[row*(row + 1)/2 + col] << " "; } cout << endl; } cout << endl; } private: T* _a; size_t _size; //即n,對稱矩陣為方陣 }; void Test() { int a[5][5] = { { 0, 1, 2, 3, 4 }, { 1, 0, 1, 2, 3 }, { 2, 1, 0, 1, 2 }, { 3, 2, 1, 0, 1 }, { 4, 3, 2, 1, 0 }, }; SymmtrixMatrix<int> sm((int*)a, 5); sm.Print(5); } int main() { Test(); system("pause"); return 0; }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。