對於乙個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 來表示。其中...