溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

對(duì)稱矩陣的壓縮儲(chǔ)存講解

發(fā)布時(shí)間:2020-08-26 02:49:07 來源:腳本之家 閱讀:305 作者:gogogo_sky 欄目:編程語言

一、存儲(chǔ)矩陣用一個(gè)二維數(shù)組即可;

對(duì)稱矩陣的壓縮儲(chǔ)存講解

二、什么是對(duì)稱矩陣:

設(shè)一個(gè)N*N的方陣A,A中任意元素Aij,當(dāng)且僅當(dāng) Aij == Aji(0 <= i <= N-1&& 0 <= j <= N-1),則矩陣A是對(duì)稱矩陣。以矩陣的對(duì)角線為分隔,分為上三角和下三角

三、對(duì)稱矩陣的壓縮儲(chǔ)存:

壓縮存儲(chǔ)稱矩陣存儲(chǔ)時(shí)只需要存儲(chǔ)上三角/下三角的數(shù)據(jù),所以最多存儲(chǔ)n(n+1)/2個(gè)數(shù)據(jù)(相當(dāng)于1+2+…+n,即等差數(shù)列求和)。

對(duì)稱矩陣和壓縮存儲(chǔ)的對(duì)應(yīng)關(guān)系:下三角存儲(chǔ)i>=j, SymmetricMatrix[i][j] ==Array[i*(i+1)/2+j]

四、代碼實(shí)現(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;
    //壓縮儲(chǔ)存過程
    for(int i=0;i<sz;++i)
    {
      for(int j=0;j<sz;++j)
      {
        if (i>=j)//_data中儲(chǔ)存下三角的數(shù)據(jù)
        {
          _data[index]=arr[i*sz+j];
          index++;
        }
        else
          break;
      }
    }
  }
  //獲取某個(gè)坐標(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;//儲(chǔ)存數(shù)據(jù)的數(shù)組
  int _size;//儲(chǔ)存原始對(duì)稱矩陣的行數(shù)(或列數(shù))
};

測(cè)試代碼:

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ù)組指針,是問題更簡(jiǎn)單
  cm.PrintfMatrix();
  return 0;
}

五、運(yùn)行結(jié)果

對(duì)稱矩陣的壓縮儲(chǔ)存講解

O(∩_∩)O

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI