亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

對稱矩陣的壓縮儲存講解

發布時間:2020-08-26 02:49:07 來源:腳本之家 閱讀:306 作者:gogogo_sky 欄目:編程語言

一、存儲矩陣用一個二維數組即可;

對稱矩陣的壓縮儲存講解

二、什么是對稱矩陣:

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

三、對稱矩陣的壓縮儲存:

壓縮存儲稱矩陣存儲時只需要存儲上三角/下三角的數據,所以最多存儲n(n+1)/2個數據(相當于1+2+…+n,即等差數列求和)。

對稱矩陣和壓縮存儲的對應關系:下三角存儲i>=j, SymmetricMatrix[i][j] ==Array[i*(i+1)/2+j]

四、代碼實現

#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中儲存下三角的數據
        {
          _data[index]=arr[i*sz+j];
          index++;
        }
        else
          break;
      }
    }
  }
  //獲取某個坐標的數據,i和j代表該數據在矩陣中的橫縱坐標
  T GetDate(int i,int j)
  {
    if (i>=j)//下三角數據
    {
      return _data[i*(i+1)/2+j];
    }
    else//上三角數據
    {
      std::swap(i,j);//將橫坐標和從坐標值交換;
      return _data[i*(i+1)/2+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;//儲存數據的數組
  int _size;//儲存原始對稱矩陣的行數(或列數)
};

測試代碼:

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);//將二維數組強制轉換為一維數組指針,是問題更簡單
  cm.PrintfMatrix();
  return 0;
}

五、運行結果

對稱矩陣的壓縮儲存講解

O(∩_∩)O

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东莞市| 宁德市| 布拖县| 油尖旺区| 吴江市| 鸡东县| 高平市| 兰州市| 新巴尔虎右旗| 罗源县| 大连市| 贡觉县| 辉县市| 宝山区| 嘉黎县| 浮梁县| 巴楚县| 永泰县| 湟中县| 石楼县| 宿州市| 霍城县| 通辽市| 连江县| 汝阳县| 宣恩县| 理塘县| 怀化市| 沙坪坝区| 科技| 竹北市| 永年县| 紫阳县| 宁明县| 峡江县| 长汀县| 九龙城区| 囊谦县| 万源市| 饶河县| 皮山县|