您好,登錄后才能下訂單哦!
對稱矩陣:
設一個N*N的方陣A,A中任意元素Aij,當且僅當Aij == Aji(0 <= i <= N-1 && 0 <= j <= N-1),則矩陣A是對稱矩陣。以矩陣的對角線為分隔,分為上三角和下三角。
如下面矩陣:
對稱矩陣壓縮存儲時只需要存儲i*(i+1)/2個數據。
對稱矩陣與壓縮矩陣的關系是:
對稱矩陣SymmetricMatrix[i][j] =壓縮矩陣Array(i*(i+1)/2+j)。
下面我實現一下對稱矩陣存儲在壓縮矩陣以及將壓縮矩陣中的元素還原成對稱矩陣打印出來的代碼。
代碼如下:
#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) { //將對稱矩陣轉換為壓縮矩陣 _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; }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。