国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

對稱矩陣的壓縮儲存講解

2020-01-26 13:31:23
字體:
供稿:網(wǎng)友

一、存儲矩陣用一個二維數(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ù)組強制轉(zhuǎn)換為一維數(shù)組指針,是問題更簡單  cm.PrintfMatrix();  return 0;}

五、運行結(jié)果

O(∩_∩)O

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網(wǎng)的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 新巴尔虎左旗| 洪洞县| 东乌珠穆沁旗| 贞丰县| 赞皇县| 萍乡市| 四川省| 巴彦淖尔市| 来安县| 安化县| 湟中县| 德清县| 武宁县| 平乐县| 金溪县| 韶关市| 奇台县| 乌兰察布市| 论坛| 广东省| 吐鲁番市| 韩城市| 香格里拉县| 闽清县| 澜沧| 隆尧县| 赤壁市| 北川| 方山县| 石台县| 兰西县| 丽水市| 义马市| 彰化县| 本溪市| 江城| 余姚市| 和顺县| 大方县| 微山县| 延安市|