若某類矩陣的大部分?jǐn)?shù)據(jù)是相同值(如0)。我們可以采用僅記錄不相同值(如非0數(shù)據(jù))的方式進(jìn)行壓縮。甲同學(xué)對(duì)m行n列的該類矩陣進(jìn)行以下處理:
●利用一維數(shù)組x存儲(chǔ)矩陣:把矩陣第1行到第m行數(shù)據(jù)逐行依次保存在數(shù)組x中,x(1)到x(n)分別存放第1行各個(gè)數(shù)據(jù),x(n+1)到x(2*n)分別存放第2行各個(gè)數(shù)據(jù),依此類推。
●對(duì)數(shù)組x中的數(shù)據(jù)進(jìn)行壓縮:a(1)~a(3)依次存放矩陣的行數(shù),列數(shù)及數(shù)值0.從數(shù)組x的第1個(gè)位置開始往后掃描,僅把非0數(shù)據(jù)所在矩陣中的行號(hào)、列號(hào)及值保存到a(4)開始的數(shù)組元素中,數(shù)組a各元素含義如圖a所示:
乙同學(xué)對(duì)數(shù)組a中的數(shù)據(jù)進(jìn)行轉(zhuǎn)置處理:
●行列轉(zhuǎn)置生成轉(zhuǎn)置矩陣:從第1行到第n行逐行生成轉(zhuǎn)置矩陣,在第i行處理時(shí),掃描數(shù)組a,若轉(zhuǎn)置矩陣當(dāng)前的行號(hào)i等于原矩陣元素的列號(hào)a(j)(j=5,8,11…),則把a(bǔ)(j)、a(j-1)及a(j+1)依次保存到數(shù)組b相應(yīng)位置,即可把原矩陣第a(j-1)行a(j)列的數(shù)據(jù)轉(zhuǎn)置為矩陣第a(j))行a(j-1)列的數(shù)據(jù)。如有3行4列矩陣的轉(zhuǎn)置過程如圖b所示。
(1)若m=4,n=3,矩陣數(shù)據(jù)如圖c所示,則數(shù)組元素a(7)到a(9)的值依次為:
2,3,2
2,3,2
(填數(shù)據(jù),用逗號(hào)分隔)
(2)甲、乙同學(xué)分別編寫程序?qū)崿F(xiàn)矩陣數(shù)據(jù)壓縮和行列轉(zhuǎn)置。VB代碼如下,請(qǐng)?jiān)跈M線處填入合適的代碼。