矩陣壓縮演算法
非零元素。
對於一個用二維數組存儲的稀疏矩陣Amn,如果假設存儲每個數組元素需要L個位元組,那麼存儲整個矩陣需要m*n*L個位元組。但是,這些存儲空間的大部分存放的是0元素,從而造成大量的空間浪費。為了節省存儲空間,可以只存儲其中的非0元素。
(1)矩陣壓縮演算法擴展閱讀
稀疏矩陣演算法的最大特點是通過只存儲和處理非零元素從而大幅度降低存儲空間需求以及計算復雜度,代價則是必須使用專門的稀疏矩陣壓縮存儲數據結構。稀疏矩陣演算法是典型的不規則演算法,計算訪存比很低,並且計算過程中的訪存軌跡與稀疏矩陣的稀疏結構相關。
『貳』 數據結構 設計演算法實現一個10行10列的對稱矩陣的壓縮和解壓縮,並要求列印出對應的內容。
#include<stdio.h>
#include<string.h>
void Press()
{
int a[10][10];
int code[10*10];
int i,j,id;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
scanf("%d",&a[i][j]);
}
id=0;
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
code[id]=a[i][j];
id++;
}
}
for(i=0;i<id;i++)printf("%d ",code[i]);
puts("");
}
void DePress()
{
int a[10][10];
int code[10*10];
int i,j,id;
id=0;
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
scanf("%d",&a[i][j]);
a[j][i]=a[i][j];
}
}
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
printf("%d ",a[i][j]);
}
puts("");
}
}
int main()
{
int cmd;
puts("輸入命令(1、壓縮,2、解壓縮):");
scanf("%d",&cmd);
if(cmd==1)
{
Press();//壓縮
}
else
{
DePress();//解壓縮
}
return 0;
}
/*
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
*/
『叄』 怎樣壓縮矩陣元素的存儲空間
AC
稀疏矩陣(SparseMatrix):是矩陣中的一種特殊情況,其非零元素的個數遠小於零元素的個數.
壓縮存儲:為多個值相同的元素只分配一個存儲空間;對0元素不分配空間.目的是節省大量存儲空間.
當使用三元組順序表(又稱有序的雙下標法)壓縮存儲稀疏矩陣時,對矩陣中的每個非零元素用三個域分別表示其所在的行號,列號和元素值.它的特點是,非零元在表中按行序有序存儲,因此便於進行依行順序處理的矩陣運算.當矩陣中的非0元素少於1/3時即可節省存儲空間.
『肆』 用C語言編寫:特殊矩陣的壓縮存儲演算法的實現(對稱矩陣、三角矩陣、對角矩陣)
可以用十字鏈表 三元組表 或者其他 都可以對特殊矩陣進行壓縮存儲
『伍』 特殊矩陣的壓縮存儲演算法的實現
還不簡單。就這樣那樣這樣那樣的。我以為你以為的、
『陸』 數據結構(c版):編寫演算法,將上下三角矩陣壓縮為一個數組矩陣
將那個上三角壓縮成一維數組的公式倒過來求解就可以得到原始的二維坐標了
『柒』 稀疏矩陣的壓縮存儲思想
為了節省存儲空間並且加快處理速度,需要對這類矩陣進行壓縮存儲,壓縮存儲的原則是:不重復存儲相同元素;不存儲零值元素。稀疏矩陣,有三元組表示法、帶輔助行向量的二元組表示法(也即行邏輯鏈表的順序表),十字鏈表表示法等。演算法基本思想:num[col]:第col列的非零元素個數;cpot[col]:第col列第一個非零元在b.data中的恰當位置;在轉置過程中,指示該列下一個非零元在b.data中的位置。
『捌』 對稀疏矩陣進行壓縮存儲的目的是什麼
對稀疏矩陣進行壓縮存儲目的是節省存儲空間。
存儲矩陣的一般方法是採用二維數組,其優點是可以隨機地訪問每一個元素,因而能夠較容易地實現矩陣的各種運算。
但對於稀疏矩陣而言,若用二維數組來表示,會重復存儲了很多個0了,浪費空間,而且要花費時間來進行零元素的無效計算。所以必須考慮對稀疏矩陣進行壓縮存儲。
(8)矩陣壓縮演算法擴展閱讀
優點
稀疏矩陣的計算速度更快,因為MATLAB只對非零元素進行操作,這是稀疏矩陣的一個突出的優點。假設矩陣A,B中的矩陣一樣,計算2*A需要一百萬次的浮點運算,而計算2*B只需要2000次浮點運算。
因為MATLAB不能自動創建稀疏矩陣,所以要用特殊的命令來得到稀疏矩陣。算術和邏輯運算都適用於稀疏矩陣。對於一個用二維數組存儲的稀疏矩陣Amn,如果假設存儲每個數組元素需要L個位元組,那麼存儲整個矩陣需要m*n*L個位元組。
『玖』 特殊矩陣的壓縮存儲:上三角、對稱、下三角存儲,有三個問題。求大俠們解答~親一個~這個圖能看清嗎
1.k=n*(n+1)/2的原因是:對於三角矩陣,從1到N的總和是這么多,也就是說整個矩陣有這么多元素。另外正三角陣對應正方形。
對稱矩陣滿足A的轉置也就是自身的特點,元素上,a[i,j] = a[j,i]。實際上的存儲可以利用三角陣。所以老實說我對於他對稱陣演算法為什麼少一個元素也有疑惑。
可能是三角陣可以對應不等長的矩陣,所以造成了k值不一樣。
2.上三角陣,存在的元素是滿足[1<= j <=n, i >= j]的關系[這里用i表橫坐標j表縱坐標],如果是長3寬4的當然不能和長4寬3的相提並論,試著畫畫就明白了。
3.對稱陣不會出現像三角陣那樣有一小角還是其他數字的情況。這個其他數字就是(6+1)-1=6。
4.壓縮存儲,只是將部分符合條件的矩陣減少一部分的存儲空間。老實說我也感覺不很有用,除非他處理的數據本身必然具備此類特點。
5.固定的,多試幾次自己記下來然後找找就好。如果沒記錯的話,在矩陣上畫畫就可以看出來。
6.stdlib.h是標準的輸入輸出庫,最為常用,至少裡麵包括了scanf等函數,只要你需要printf你就不能扔掉它。否則會出現函數未定義的問題。畢竟語言本身不提供函數類庫,類庫需要另行引用。