特殊矩陣 稀疏矩陣

2021-07-30 14:29:11 字數 1477 閱讀 2832

對於乙個m×n的矩陣,設s為矩陣的元素總個數s=m×n,設t為矩陣中非零元素的個數,滿足t《稀疏矩陣的零元素非常多,且分布無規律,所以稀疏矩陣的壓縮儲存方法為:只儲存矩陣中的非零元素,按照三元組的形式儲存。三元組由非零元素,該元素行下標和該元素列下標三個資料構成,放在乙個列數為3的陣列中。

儲存結構又分陣列結構和鍊錶結構兩個大類,其中鍊錶結構又有一般鍊錶、行指標陣列鍊錶和行指標的十字鍊錶儲存結構,是鍊錶的直接應用和組合應用。

陣列結構

基於向量類,首先要設計三元組類,用於存放位置和數值資訊:

package arrayvectorsetmatrix;

/*** @author sun

*/public class three

three()

}

接著建立稀疏矩陣類:

package arrayvectorsetmatrix;

/*** @author sun

*///借用myvector類

public class spamatrix

public void evaluate(int r,int c,int d,three item)throws exception

}}

最後測試並完成矩陣轉置(無序),其實在三元組中就是行號和列號互換:

package arrayvectorsetmatrix;

/*** @author sun

*/public class testspamatrix

catch(exception e) }}

/*原矩陣:

矩陣行數為:6,矩陣列數為:7,非零元素個數為:6

矩陣非零元素三元組為:

a<1,3>=11.0

a<1,5>=17.0

a<2,2>=25.0

a<4,1>=19.0

a<5,4>=37.0

a<6,7>=50.0

轉置後的矩陣:

矩陣行數為:7,矩陣列數為:6,非零元素個數為:6

矩陣非零元素三元組為:

a<3,1>=11.0

a<5,1>=17.0

a<2,2>=25.0

a<1,4>=19.0

a<4,5>=37.0

a<7,6>=50.0

*/

三元組鍊錶(鍊錶結構儲存)

(1)帶頭結點的三元組鍊錶:頭結點儲存矩陣的行數列數,其他結點按行號排序,每個結點存的是三元組中的三個元素。該法實現矩陣運算的時間效率不高,因為訪問慢。

(2)行指標陣列結構的三元組鍊錶:沒有頭結點,就是設定乙個行指標陣列,第一列為行號,第二列為指標,每個指標指向該行的第乙個不為0元素值和其列號構成的結點,然後繼續向後直到把本行所有不為0元素結點連線完成。這樣,從某行進入找某列元素的操作比較容易,但從列進入找比較難。

不做演示。

特殊矩陣之稀疏矩陣

特殊矩陣的第二種 稀疏矩陣 稀疏矩陣是指矩陣中有效元素遠遠小於無效值的個數,大概比例就是 有效值個數 無效值個數 0.05 所以,稀疏矩陣在儲存時只需要儲存有效元素的位置資訊以及值,對於無效值只需要用 invalid來記錄。include include include using namespac...

陣列的壓縮儲存(特殊矩陣 稀疏矩陣)

其實這裡就不應該說是陣列了,而應該是說行列式,對稱矩陣 a i j a j i 上下三角行列式 對角線以下 以上的元素均為0 帶狀行列式 這個可能不太好理解,舉乙個例子 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 這時看對角線比較舒服,可以看出...

稀疏矩陣的壓縮矩陣

如果乙個矩陣中的大部分元素為零,稱為稀疏矩陣。對於稀疏矩陣而言,時間儲存的資料項很少,如果在程式中使用傳統的二維陣列方式來儲存,則十分浪費儲存空間,且矩陣越大,資源浪費越嚴重。為提記憶體空間利用率,可利用三項式 3 tuple 的資料結構,即把乙個非零項用 i,j,item value 來表示。其中...