矩陣壓縮儲存

2021-08-02 10:37:22 字數 1491 閱讀 4662

在c中矩陣的表示是用二維陣列。那麼首先要搞清楚陣列行列與矩陣行列的對應。在c語言中二維陣列是按行儲存的。即順序儲存每一行。(第一行,第二行。。。最後一行)

看一下例子:

陣列數量替換成arrs[i][j],方便說明。

int arrs[i][j] = ,,};

//test 二維陣列記憶體位置

for(i = 0; i < 3; i++)

}

在上例中i表示有多少行,j 表示一行有多少列。剛好與矩陣的行列對應。

對稱矩陣是指元素以主對角線為對稱軸對稱,如demo**中的例子:

int arrs[row][col] = ,

,};

在上面的例子中元素以『1』構成的對角線對稱,對於對稱矩陣的性質我們現在需要用的是 矩陣(i,j) == 矩陣(j,i);

矩陣壓縮是將矩陣儲存於一位陣列,以節約空間。那麼根據矩陣(i,j) == 矩陣(j,i);我們就可以只儲存「矩陣(i,j)」了。當要訪問矩陣(j,i)時交換 i 和 j 就可以了。

那麼怎麼壓縮矩陣呢?,可以看出對於下面的例子中儲存上三角和下三角都可以,這裡以儲存下三角為例。對於下面的矩陣我們只需要儲存對角線和其下面的元素。那麼要儲存多少元素?或者一位陣列要多大空間?來算一下:

在第一行需要儲存1個元素;在第二行需要儲存2個元素;在第三行需要儲存3個元素;則需要儲存1+2+3=6個元素。每行元素數量遞增1,遞增到n(n=行數)。那麼推廣開儲存有n行的對稱矩陣需要的空間大小是:「1+2+3+…+n-1+n」= n(n+1)/2

現在可以壓縮儲存元素了。解壓矩陣參見下面的demo**。

,,

#include 

#include

#include

#define row 3

#define col 3

int *yasuo(int arrs[row][col])

}return arr;

}//matrix test

void matrixtest(),,};

//test 壓縮

int *arr = yasuo(arrs);

printf("test 壓縮\n");

for(i = 0; i < size; i++)

printf("test 解壓縮\n");

//test 解壓縮

for(i = 0; i < row; i++)

printf("\n");

}}//取元素

//引數解釋:int arr:壓縮後的一位陣列; int length:陣列長度 int i and int j:對應二維陣列的下標

//返回元素在一維陣列中的下標

int getmatrix(int arr,int length,int i,int j)

if(i <= j)else

}

矩陣壓縮儲存

矩陣乘法 原始碼十字鍊錶 const int max size 1000 const int max size of row 100 typedef struct triple typedef struct rltmatrix 三元組順序表 rltmatrix行列交換 重新排序 普通方法 按列查詢 ...

矩陣壓縮儲存

在c中矩陣的表示是用二維陣列。那麼首先要搞清楚陣列行列與矩陣行列的對應。在c語言中二維陣列是按行儲存的。即順序儲存每一行。第一行,第二行。最後一行 看一下例子 陣列數量替換成arrs i j 方便說明。int arrs i j test 二維陣列記憶體位置 for i 0 i 3 i 在上例中i表示...

矩陣壓縮儲存思路

為什麼矩陣要進行壓縮儲存?為了節省空間。我們對相同的元素或者零不再分配空間,把二維的矩陣壓縮存進一維陣列中 能進行壓縮儲存的矩陣稱為特殊矩陣 特殊矩陣主要包括 n階對稱矩陣 上三角矩陣 下三角矩陣 稀疏矩陣 n階對稱矩陣的條件如下 a i j a j i 1 i,j n 因為是把二維陣列存入一維陣列...