當前位置:首頁 » 服務存儲 » 矩陣壓縮存儲的總結
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

矩陣壓縮存儲的總結

發布時間: 2022-12-15 18:40:25

❶ 怎樣壓縮矩陣元素的存儲空間

AC
稀疏矩陣(SparseMatrix):是矩陣中的一種特殊情況,其非零元素的個數遠小於零元素的個數.
壓縮存儲:為多個值相同的元素只分配一個存儲空間;對0元素不分配空間.目的是節省大量存儲空間.
當使用三元組順序表(又稱有序的雙下標法)壓縮存儲稀疏矩陣時,對矩陣中的每個非零元素用三個域分別表示其所在的行號,列號和元素值.它的特點是,非零元在表中按行序有序存儲,因此便於進行依行順序處理的矩陣運算.當矩陣中的非0元素少於1/3時即可節省存儲空間.

❷ 矩陣的壓縮存儲

可以看出,我們僅需聲明一個長度為(1+n)n/2的一維數組array即可,剩餘的都是重復的元素。

假設一維數組存儲的是下三角部分,並且我們現在找的a[i][j]也是在下三角,則:

寫成完整的公式,如下所示

此時我們可以聲明一個長度為(1 + n) * n / 2 + 1的一維數組來存儲這個三角矩陣,+1是增加一個存儲常數的空間。

線代里的對角矩陣,除對角線外,其餘元素都是0:

我們這里說的是非零元素都集中在對角線上下若干條對角線的對角矩陣。

n階對角矩陣的存儲有些困難,假設a條對角線是非0元,則一維數組array的大小為:

給定 i j,找對應的 k

如何壓縮?我們只需要存儲非0元即可,我們可以定義一個結構體:

進行壓縮後的存儲方式:

第一行表明原矩陣是5 * 5,並且有3個非0元

❸ 矩陣的壓縮存儲例子

稀疏矩陣壓縮存儲

一般來講,零元素多到了一定程度並且沒有規律分布的矩陣叫做稀疏矩陣。對稀疏矩陣的壓縮存儲必須充分考慮以下三個問題:
① 盡可能減少或者不存儲零元素以節省空間,降低空間復雜度。
② 盡可能快地實現數據元素的存儲位置與原有位置之間的轉換。
③ 盡可能不與零元素進行運算,以降低時間復雜度。
稀疏矩陣的壓縮存儲有三種最常見的方法,分別是三元組順序表、行邏輯鏈接順序表和十字鏈表。

❹ 對稱矩陣的壓縮存儲

#include<iostream>
using namespace std;

int main()
{
int temp[1000];
int t[500][500];
int arry1[1000],arry2[1000];
int n;
scanf("%d",&n);
int i;
int m;
m=n*n+n;
m=m/2;
for(i=1;i<=m;i++)
{
scanf("%d",&arry1[i]);
}
for(i=1;i<=m;i++)
{
scanf("%d",&arry2[i]);
}
for(i=1;i<=m;i++)
{
temp[i]=arry1[i]+arry2[i];
}
int j;
int k;
for(i=1,k=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{ t[i][j]=temp[k];
k++;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(j>i)
printf("%d",t[j][i]);
else
printf("%d",t[i][j]);
if(j!=n)
printf(" ");
}
printf("\n");
}

return 0;
}

❺ 數據結構-特殊矩陣的壓縮存儲

本文介紹對稱矩陣、三角矩陣、對角矩陣和稀疏矩陣的壓縮存儲方法。

在一個n階矩陣A中,若元素滿足aij=aji,0<=i,j<=n-1,則稱矩陣A為對稱矩陣。

按行優先順序將這些元素存放在一個一維數組s[n(n+1)/2]中,元素aij在s中對應的下標為k:

以主對角線劃分,三角矩陣分為上三角和下三角兩種,上三角矩陣的下三角所有元素均為常數c,下三角矩陣正好相反。

按行優先順序將三角矩陣存放在一維數組s[n(n+1)/2+1],其中常數c存放在數組的最後一個分量中。

上三角矩陣元素aij在s中對應的下標為k:

下三角矩陣元素aij在s中對應的下標為k:

對角矩陣是指矩陣中所有的非零元素集中在以主對角線為中心的帶狀區域中。一個k對角矩陣(k為奇數)A滿足若|i-j|>(k-1)/2則元素aij=0。

將三對角矩陣A中的非零元素按行優先順序存放到數組s[3n-2]中,在三對角矩陣A中,除第一行和最後一行只有兩個非零元素外,其他每行中均有三個非零元素。三對角矩陣中的元素aij在s中對應的下標為 k=3×i-1+j-(i-1)=2×i+j .

設矩陣Amn中有s個非零元素,若s遠遠小於矩陣元素的總數,即s<<mxn,則稱A為稀疏矩陣。

對於稀疏矩陣的壓縮存儲方法通常有兩種,分別是三元組順序表和十字鏈表。

1. 三元組順序表

每個元素是一個結構體,包括該元素在矩陣中的行數、列數和數值,所有元素存在一個向量vector中,並同時記錄矩陣的行數、列數及非零元素個數等信息。

2. 十字鏈表

為了克服順序表中對非零元素插入和刪除操作帶來的不便,採用鏈接存儲結構存儲稀疏矩陣。

十字鏈表將每個元素存儲為一個結構體,除了包括元素的行號、列號、數值外,還包括一個向右指針域用於指向同一行中的下一個非零元素和一個向下指針域用於指向同一列中的下一個非零元素。所有結構體通過兩個一維指針數組分別存儲各個行鏈表的頭指針和各個列鏈表的頭指針組織成一個整體。

目標是將每個元素的行號列號交換,並按照新的行列號按序存放。關鍵在於如何高效地進行按序存放。

方法一:樸素轉置演算法

按照原列號分別從頭至尾掃描,依次放入新的矩陣中。對於一個m行n列且非零元素個數為t的稀疏矩陣而言,該演算法的時間復雜度為O(t×n)。

方法二:快速轉置演算法

採用一個數組cnum[cols]記錄每一列中的元素個數,一個數組cpot[cols]記錄每一列的第一個非零元素在轉置矩陣順序表中的下標。cnum和cpot各採用一次遍歷得到,其中cpot[0]=0,cpot[col]=cpot[col-1]+cnum[col-1]。

❻ 稀疏矩陣的壓縮存儲思想

為了節省存儲空間並且加快處理速度,需要對這類矩陣進行壓縮存儲,壓縮存儲的原則是:不重復存儲相同元素;不存儲零值元素。稀疏矩陣,有三元組表示法、帶輔助行向量的二元組表示法(也即行邏輯鏈表的順序表),十字鏈表表示法等。演算法基本思想:num[col]:第col列的非零元素個數;cpot[col]:第col列第一個非零元在b.data中的恰當位置;在轉置過程中,指示該列下一個非零元在b.data中的位置。

❼ 上三角矩陣的壓縮存儲原則是怎樣的

上三角矩陣的壓縮存儲原則:對於三角矩陣,從1到N的總和是這么多,也就是說整個矩陣有這么多元素。另外正三角陣對應正方形。

經常出現一些階數很高的矩陣,同時在矩陣中非零元素呈某種規律分布或者矩陣中有大量的零元素,若仍然用常規方法存儲,可能存儲重復的非零元素或零元素,這將造成存儲空間的大量浪費。因此對這類矩陣進行壓縮存儲,從而合理地利用存儲空間。

簡正模式:

矩陣在物理學中的另一類泛應用是描述線性耦合調和系統。這類系統的運動方程可以用矩陣的形式來表示,即用一個質量矩陣乘以一個廣義速度來給出運動項,用力矩陣乘以位移向量來刻畫相互作用。求系統的解的最優方法是將矩陣的特徵向量求出(通過對角化等方式)。

稱為系統的簡正模式。這種求解方式在研究分子內部動力學模式時十分重要:系統內部由化學鍵結合的原子的振動可以表示成簡正振動模式的疊加。描述力學振動或電路振盪時,也需要使用簡正模式求解。

❽ 數據結構,矩陣壓縮存儲問題

這個問題出在下標的問題上吧,第一個問題,明確說明第一個非零元素a(1,1)存於B[0]中,所以推導時沒問題。

第二個問題並沒有說第一個非零元素a(1,1)存於B[0]中,但大多教材推導是,是將第一個非零元素a(0,0)存於B[0]中,所以公式就不一樣了,你的推導邏輯沒問題。