稀疏矩陣的概念及三元組表示法
如果乙個矩陣中的很多元素的值為零,即零元素的個數遠遠大於非零元素的個數時,稱該矩陣為稀疏矩陣。
由於矩陣中零元素過多,若用一般方法對稀疏矩陣進行儲存會造成空間的大大浪費,因此,我們在儲存稀疏矩陣的時候,只需要對非零元素進行儲存。
三元組表示法實際上就是乙個二維陣列,即將稀疏矩陣中單個非零元的資訊(所在行、所在列、數值)用乙個陣列進行才能儲存,再將所有存有單個非零元的陣列再用乙個陣列進行儲存。需要注意的是,二維陣列開始的第一串資訊存的是整個稀疏矩陣的資訊(即矩陣的規格以及非零元個數, 並且每個非零元素需按照行號遞增、同一行的非零元素按列號遞增的順序存放。
舉個栗子:定義乙個7∗
6 的矩陣a。 a=
⎡⎣⎢⎢
⎢⎢⎢⎢
⎢⎢⎢⎢
⎢003
01200
0000
000−
5000
00210
2000
0010
0000
0000
0040
⎤⎦⎥⎥
⎥⎥⎥⎥
⎥⎥⎥⎥
⎥ 用可用二維陣列b[8][3]對其進行儲存,其中b[0][0~2]存放矩陣資訊,b[1~7][0~2]存放非零元素的資訊。相應**如下:b0
1207
6710
2-520
4131
3242
0354
01265
5476
221稀疏矩陣的倒置及相應三元組表示法的實現
一般矩陣倒置就是將下標換一下,但是三元組表示法要按行號遞增、相同行按列號遞增,所以直接調換下標不可以實現稀疏矩陣的倒置,我們還要將座標交換後的元素陣列對應地存入陣列相應位置,如將b[1][0~2]0行2列的元素轉置後變為c[?][0~2]2行0列,將它對應的存到c陣列的?下標處。由於轉置前後陣列非零元素的個數不會發生改變,所以我們需要知道當前轉置的元素前面有多少個元素。一種方法是定義兩個陣列分別用來存放轉置後矩陣每行非零元素的個數以及每行首個非零元素在三元組c[0~2]的起始位置,類似於首位址加偏移量的方法。
具體實現:
定義陣列x[size],用來存放矩陣轉置後每行非零元個數(也就是轉置前每列非零元個數),其中陣列下標就等於轉置前矩陣的列號,這樣通過對列號的直接訪問就可以知道當前列非零元個數;
y[size]用來存放轉置後每行首個非零元素在三元組c[0~2]的起始位置,其中陣列下標表示轉置前矩陣的列號。而y[size] = y[size-1] + x[size-1],其中y[0]初始為0.因為陣列下標從0開始,即代表陣列第乙個元素的在c[0][ ]。
**實現:
typedef
struct matrix; //表示稀疏矩陣的型別
typedef
int spmatrix[100][3]; //稀疏矩陣對應的三元組
void transpmatrix (spmatrix b, spmatrix c)
}}
此處建議大家對**部分進行深入的解讀,必要時可取例子代入以幫助理解。
歡迎各位來本人的部落格金傲asher的個人部落格 參觀,所有文章將第一時間發布在上面的部落格,csdn只會偶爾搬運。
C語言 稀疏矩陣操作(三元組表示法)
稀疏矩陣例項 include define ok 1 define error 0 define true 1 define false 0 define maxsize 100 typedef int status typedef float elemtype typedef structtrip...
三元組表示稀疏矩陣並相加
要求稀疏矩陣用三元組結構儲存,實現矩陣a b c,並採用矩陣形式顯示結果。定義兩個結構體,triple結構體用來存放每乙個非零元素的資訊 行標,列標,數值 tripledata用來存放兩個三元組矩陣的資訊 行數,列數,非零元素的個數 每乙個三元組結構都需要呼叫這兩個結構體,兩個結構體共同組成乙個稀疏...
稀疏矩陣 三元組表示的矩陣相加減
設有採用三元組順序表儲存的兩個稀疏矩陣m和n,試著編寫乙個演算法,實現m和n相乘 1.標頭檔案 triseqmatrix.h 該資料夾中包含著三元稀疏矩陣的建立 初始化 轉置 銷毀等操作 pragma once include include define maxsize 200 typedef s...