亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

對稱矩陣的壓縮儲存講解

 更新時間:2019年02月20日 15:28:14   作者:gogogo_sky  
今天小編就為大家分享一篇關(guān)于對稱矩陣的壓縮儲存講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

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

二、什么是對稱矩陣:

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

五、運行結(jié)果

O(∩_∩)O

總結(jié)

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

相關(guān)文章

  • C語言實現(xiàn)Fibonacci數(shù)列遞歸

    C語言實現(xiàn)Fibonacci數(shù)列遞歸

    這篇文章主要介紹了C語言實現(xiàn)Fibonacci數(shù)列遞歸,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語言文件操作中 fgets與fputs 函數(shù)詳解

    C語言文件操作中 fgets與fputs 函數(shù)詳解

    這篇文章主要介紹了C語言文件操作中 fgets與fputs 函數(shù)詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • c語言printf實現(xiàn)同一位置打印輸出的實例

    c語言printf實現(xiàn)同一位置打印輸出的實例

    下面小編就為大家?guī)硪黄猚語言printf實現(xiàn)同一位置打印輸出的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • C語言多文件編程問題解析

    C語言多文件編程問題解析

    在某些場景中,考慮到編譯效率和可移植性,#pragma once 和 #ifndef 經(jīng)常被結(jié)合使用來避免頭文件被 重復(fù)引入,這里介紹用 _Pragma 操作符避免頭文件重復(fù)引入的問題,感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • 詳細(xì)解析命令行的getopt_long()函數(shù)

    詳細(xì)解析命令行的getopt_long()函數(shù)

    getopt_long支持長選項的命令行解析,函數(shù)中的參數(shù)argc和argv通常直接從main()的兩個參數(shù)傳遞而來
    2013-09-09
  • C++ 中CListCtrl的每個項都顯示不同的提示信息

    C++ 中CListCtrl的每個項都顯示不同的提示信息

    這篇文章主要介紹了C++ 中CListCtrl的每個項都顯示不同的提示信息的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • C++編寫LINUX守護(hù)進(jìn)程的實現(xiàn)代碼

    C++編寫LINUX守護(hù)進(jìn)程的實現(xiàn)代碼

    這篇文章主要介紹了如何使用C++實現(xiàn)LINUX守護(hù)進(jìn)程,文中代碼非常詳細(xì),供大家學(xué)習(xí)參考,感興趣的小伙伴可以了解下
    2020-06-06
  • 關(guān)于C++一些特性的探究

    關(guān)于C++一些特性的探究

    下面小編就為大家?guī)硪黄P(guān)于C++一些特性的探究。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • C++繼承模式詳解

    C++繼承模式詳解

    繼承機制是面向?qū)ο蟪绦蛟O(shè)計使代碼可以復(fù)用的最重要的手段,它允許程序員在保持原有的特性基礎(chǔ)上進(jìn)行擴展,增加功能,這樣產(chǎn)生新的類,稱作是派生類。繼承呈現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計的層析結(jié)構(gòu),體現(xiàn)了由簡單到復(fù)雜的認(rèn)知過程。繼承是類設(shè)計層次的復(fù)用。
    2021-12-12
  • C語言的預(yù)處理介紹

    C語言的預(yù)處理介紹

    大家好,本篇文章主要講的是C語言的預(yù)處理介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評論