一、存儲矩陣用一個二維數(shù)組即可;
目前成都創(chuàng)新互聯(lián)公司已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管運營、企業(yè)網(wǎng)站設(shè)計、托克遜網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
二、什么是對稱矩陣:
設(shè)一個N*N的方陣A,A中任意元素Aij,當(dāng)且僅當(dāng) Aij == Aji(0 <= i <= N-1&& 0 <= j <= N-1)
,則矩陣A是對稱矩陣。以矩陣的對角線為分隔,分為上三角和下三角
三、對稱矩陣的壓縮儲存:
壓縮存儲稱矩陣存儲時只需要存儲上三角/下三角的數(shù)據(jù),所以最多存儲n(n+1)/2個數(shù)據(jù)(相當(dāng)于1+2+…+n,即等差數(shù)列求和)。
對稱矩陣和壓縮存儲的對應(yīng)關(guān)系:下三角存儲i>=j, SymmetricMatrix[i][j] ==Array[i*(i+1)/2+j]
四、代碼實現(xiàn)
#include<iostream> using namespace std; template<class T> class CompressionMatrix { public: CompressionMatrix(T* arr,int sz) :_data(new T[sz*(sz+1)/2]) ,_size(sz) { int index=0; //壓縮儲存過程 for(int i=0;i<sz;++i) { for(int j=0;j<sz;++j) { if (i>=j)//_data中儲存下三角的數(shù)據(jù) { _data[index]=arr[i*sz+j]; index++; } else break; } } } //獲取某個坐標(biāo)的數(shù)據(jù),i和j代表該數(shù)據(jù)在矩陣中的橫縱坐標(biāo) T GetDate(int i,int j) { if (i>=j)//下三角數(shù)據(jù) { return _data[i*(i+1)/2+j]; } else//上三角數(shù)據(jù) { std::swap(i,j);//將橫坐標(biāo)和從坐標(biāo)值交換; return _data[i*(i+1)/2+j]; } } //打印矩陣的數(shù)據(jù) void PrintfMatrix() { for (int i=0;i<_size;++i) { for (int j=0;j<_size;++j) { cout<<GetDate(i,j)<<" "; } cout<<endl; } } ~CompressionMatrix() { if (_data!=NULL) { delete[] _data; _data=NULL; _size=0; } } protected: T* _data;//儲存數(shù)據(jù)的數(shù)組 int _size;//儲存原始對稱矩陣的行數(shù)(或列數(shù)) };
測試代碼:
int main() { 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}, }; CompressionMatrix<int> cm((int*)a,5);//將二維數(shù)組強(qiáng)制轉(zhuǎn)換為一維數(shù)組指針,是問題更簡單 cm.PrintfMatrix(); return 0; }
五、運行結(jié)果
O(∩_∩)O
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對創(chuàng)新互聯(lián)的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
分享文章:對稱矩陣的壓縮儲存講解
標(biāo)題鏈接:http://chinadenli.net/article6/gogsog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、動態(tài)網(wǎng)站、外貿(mào)建站、App設(shè)計、品牌網(wǎng)站設(shè)計、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)