對稱矩陣 稀疏矩陣的壓縮儲存

2021-07-16 09:38:30 字數 2759 閱讀 9591

對稱矩陣、稀疏矩陣的壓縮儲存

1)對稱矩陣的壓縮儲存

對稱矩陣顧名思義就是符合行和列的個數相同,並且矩陣中儲存的資料上三角和下三角中對應位置上的元素值是相等的。為了能夠減少儲存的空間,我們可以只儲存上三角矩陣、或者下三角矩陣中的元素,這樣就能夠極大地節省空間的浪費。下面是對稱矩陣的示列:

假設對稱矩陣為n*n,這裡以行優先儲存下三角矩陣,總共需要儲存的元素有n*(n+1)/2個元素,從而將n*n個元素壓縮到n*(n+1)/2大小的空間中。

下面是具體的程式實現:

——symmetric.h檔案

//實現對稱矩陣

#include template //稀疏矩陣的儲存需要n*(n + 1) / 2 個空間,將對稱矩陣的下三角矩陣儲存在乙個一維陣列中

class matrix

else}}

}t& access(size_t i, size_t j)        //列印矩陣中某一元素

return _array[i * (i + 1) / 2 + j];

}void display()    //列印

cout <

}protected:

t* _array;

size_t _size;

};void test1()

,                   ,,,

};matrixs1((int*)arr, 5);

int ret = s1.access(2, 1);

s1.display();

cout <

}

2)稀疏矩陣的壓縮儲存

稀疏矩陣是指矩陣中大多數元素為無效資料的矩陣,即就是矩陣中的有效元素遠遠少於無效元素。對於稀疏矩陣我們應該怎樣對其進行儲存?稀疏矩陣沒有對稱矩陣那樣上三角矩陣與其下三角矩陣的元素是對應相等的特點,不能像對稱矩陣一樣只儲存上三角或者下三角矩陣中的元素,但是稀疏矩陣最大的特點就是矩陣中所需要的資料遠遠少於無效的資料,所以我們可以採取只儲存有效的資料,將有效資料的行、列和值同時進行儲存。下面為儲存的圖示:

下面為三元組表的型別如下:

struct point

;稀疏矩陣的儲存問題解決了,那麼矩陣的轉置又應該怎麼解決?

方法一:列序遞增轉置法

採用按照被轉置矩陣三元組表_array的列序(即轉置後三元組表的行序)遞增的順序進行轉置,並依次送入轉置後矩陣的三元組表中。具體的做法就是:將從開始以行進行遍歷三元組表_array,找出其中所有列為1的元組,轉置後進行儲存。接著找出所有列為2的元組,轉置後進行儲存。依次類推...

方法二:一次定位快速演算法

這個演算法需要建立兩個陣列分別儲存三元組表中第i列中非零元素的個數,存放轉置前三元組表中第i列中第乙個非零元素在三元組表b中的儲存位置。下面為演算法具體的**:

下面是具體的程式實現:

——sparse.h檔案

//實現稀疏矩陣的儲存(儲存點的位置資訊(行、列、值))

#include #include //容器

template struct point

};template class matrix

matrix(t* arr, int row, int col, const t& invalue)      //建構函式,invalue為無效值}}

_rows = row;

_cols = col;

_invalues = invalue;

}void display()    //列印稀疏矩陣

else

}cout 

matrixtransport()        //將稀疏矩陣進行轉置

index++;}}

return tmp;

}/*快速轉置的思想是將原來矩陣中每行的有效資料和每行開始的位置相加,

能夠直接確定有效資料在一維陣列中的儲存位置,然後直接進行行列交換*/

matrixfasttransport()         //快速轉置

_rowstart[0] = 0;   //記錄開始位置

for (size_t i = 1; i 

index = 0;

while (index 

delete _rowcount;

delete _rowstart;

return tmp;

}protected:

vector> _array;

size_t _rows;

size_t _cols;

t _invalues;

};void test1()

,                       ,,,

};matrixs1((int*)arr, 4, 5, 0);

s1.display();

cout <

matrixtmp = s1.transport();

tmp.display();

cout <

matrixptr = s1.fasttransport();

ptr.display();

}

矩陣 對稱矩陣及其壓縮儲存 稀疏矩陣

什麼是對稱矩陣 symmetricmatrix 對稱對稱 看 設乙個n n的方陣a,a中任意元素aij,當且僅當aij aji 0 i n 1 0 j n 1 則矩陣a是對稱矩陣。以矩陣的對角線為分隔,分為上三角和下三角。壓縮存就是矩陣儲存時只需要儲存上三角 下三角的資料,所以最多儲存n n 1 2...

矩陣 對稱矩陣及稀疏矩陣的壓縮儲存

1.稀疏矩陣 稀疏矩陣及其壓縮儲存 pragma once include include using namespace std templatestruct triple template class sparsematrix sparsematrix t arr,size t row,size...

對稱矩陣及對稱矩陣的壓縮儲存

1.對稱矩陣 設乙個n n的方陣a,a中任意元素aij,當且僅當aij aji 0 i n 1 0 j n 1 則矩陣a是對稱矩陣。以矩陣的對角線為分隔,分為上三角和下三角。2.壓縮儲存稱矩陣儲存時只需要儲存上三角 下三角的資料,所以最多儲存n n 1 2個資料 根據等差數列的前n項和可求得 3.對...