對稱矩陣的壓縮儲存講解
一、存儲矩陣用一個二維數(shù)組即可;
二、什么是對稱矩陣:
設一個N*N的方陣A,A中任意元素Aij,當且僅當 Aij == Aji(0 <= i <= N-1&& 0 <= j <= N-1),則矩陣A是對稱矩陣。以矩陣的對角線為分隔,分為上三角和下三角
三、對稱矩陣的壓縮儲存:
壓縮存儲稱矩陣存儲時只需要存儲上三角/下三角的數(shù)據(jù),所以最多存儲n(n+1)/2個數(shù)據(jù)(相當于1+2+…+n,即等差數(shù)列求和)。
對稱矩陣和壓縮存儲的對應關系:下三角存儲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;
}
}
}
//獲取某個坐標的數(shù)據(jù),i和j代表該數(shù)據(jù)在矩陣中的橫縱坐標
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);//將橫坐標和從坐標值交換;
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ù)組強制轉換為一維數(shù)組指針,是問題更簡單
cm.PrintfMatrix();
return 0;
}
五、運行結果
O(∩_∩)O
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支持。如果你想了解更多相關內容請查看下面相關鏈接
上一篇:一元多項式加法運算
欄 目:C語言
下一篇:C++稀疏矩陣的各種基本運算并實現(xiàn)加法乘法
本文標題:對稱矩陣的壓縮儲存講解
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/425.html
您可能感興趣的文章
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 01-10c語言求1+2+...+n的解決方法
- 01-10求子數(shù)組最大和的解決方法詳解
- 01-10深入理解約瑟夫環(huán)的數(shù)學優(yōu)化方法
- 01-10深入二叉樹兩個結點的最低共同父結點的詳解
- 01-10數(shù)據(jù)結構課程設計- 解析最少換車次數(shù)的問題詳解
- 01-10c語言 跳臺階問題的解決方法
- 01-10如何判斷一個數(shù)是否為2的冪次方?若是,并判斷出來是多少次方


閱讀排行
本欄相關
- 04-02c語言函數(shù)調用后清空內存 c語言調用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求
隨機閱讀
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10C#中split用法實例總結
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設置


