稀疏矩陣壓縮儲存(C語言實現)

2021-10-05 04:02:00 字數 2332 閱讀 6446

在乙個矩陣中,如果非0元素遠遠少於0元素,那麼這個矩陣就是稀疏矩陣,在實際應用中,計算機會耗費大量的空間儲存這些無意義的0元素,如果能夠壓縮一下,將會減少計算機的開銷。本篇文章以五子棋的棋局儲存為背景,用c語言實現原始稀疏矩陣轉換為壓縮矩陣並且儲存為檔案,棋局覆盤則讀取檔案將壓縮矩陣轉換為原始稀疏矩陣。

假如有如下棋局,如果要儲存,可以用1來表示紅棋子,2來表示黑棋子,0表示無棋子。

需求就是將上述棋局轉換為如下矩陣

棋局儲存:1、統計有多少個有效元素count

2、定義長度為count+1,寬度為3的矩陣arr

3、逐一賦值,存入檔案

棋局覆盤:1、讀取檔案第一行,得到原始矩陣的行列數,定義原始矩陣

2、將檔案中對應的非0值賦值給原始矩陣

#include #include #define len 6

/**求輸出稀疏矩陣

*/void showarr(int *arr, int row,int col)

}/**

求輸出原始方陣

*/void showoldarr(int arr[len])

if(j == len) printf("\n"); }}

/**求有效元素個數

*/int arrnum(int arr[len])

} return count;

}int main(),,};

//1表示白棋子,2表示黑棋子,0表示無棋子

printf("原始矩陣:\n");

showoldarr(oldarr);

//得到有效資料的個數,確定稀疏矩陣的行數

int num = arrnum(oldarr);

int row = num+1;

int col = 3;

//建立稀疏矩陣,因為c語言中的二維陣列長度不能含有變數,所以用指標的指標來定義

int *newarr;

newarr=(int *)malloc(sizeof(int)*(num+1)*3);

//先給稀疏矩陣的第一行賦值

*newarr = len;

*(newarr+1) = len;

*(newarr+2) = num;

//再給剩下的行賦值

for(i = 3 ; i < row*col ; i+=3)

}k+=1;

break;

}} printf("稀疏矩陣:\n");

showarr(newarr,row,col);

//將矩陣寫入檔案

file *p=fopen("arr.txt","w");

for(i = 0 ; i < row*col ;)

fclose(p);

}

棋局儲存執行結果

輸出原始陣列

*/void showarr(int *arr, int row,int col)

}int main(){

char line[256];

file *f = fopen("arr.txt", "rb");

//先讀第一行

fgets(line, 256, f);

int ele = atoi(line);

char rlen =ele/100; //得到矩陣長度

char clen =ele/10%10; //得到矩陣寬度

int *arr; //定義乙個空間來放原始矩陣

arr = (int *)malloc(sizeof(int)*rlen*clen);//根據矩陣長度寬度開闢空間

c語言中,陣列的長度定義不可以為變數,必須是常量,因此這裡便用指標開闢空間來代替二維陣列,實際上二維陣列的物理記憶體和一位陣列一樣,都是線性儲存,因此實質上是一樣的。指標的取值怎麼取也是容易出錯的地方,如果寫錯表示式,會出現程式停止。

C 實現稀疏矩陣的壓縮儲存例項

什麼是稀疏矩陣呢,就是在m n的矩陣中,有效值的個數遠小於無效值的個數,並且這些資料的分布沒有規律。在壓縮儲存稀疏矩陣的時候我們只儲存極少數的有效資料。我們在這裡使用三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序先後次序依次存放。下面我們來看一下 實現。include include...

稀疏矩陣的壓縮儲存

include include using namespace std templateclass sparsematrix sparsematrix 訪問稀疏矩陣中row行col中的元素 t access int row,int col it return invalid for size t i...

稀疏矩陣的壓縮儲存

稀疏矩陣的壓縮儲存 實現稀疏矩陣壓縮儲存,並實現矩陣轉置和求和。輸入矩陣時,首先需要輸入非零元素的個數,然後分別輸入矩陣的 行號,列號和值。輸完2個矩陣後,自動進行計算第乙個矩陣的轉置以及兩個矩陣的和。例如 輸入如下 100 90 5 矩陣的行數為100,列數為90,共5個非零元素。1 10 100...