資料結構之稀疏矩陣17簡要介紹

2021-06-26 09:47:05 字數 3296 閱讀 9447



一、稀疏矩陣的定義

對於那些零元素數目遠遠多於非零元素數目,並且非零元素的分布沒有規律的矩陣稱為稀疏矩陣(sparse)。

人們無法給出稀疏矩陣的確切定義,一般都只是憑個人的直覺來理解這個概念,即矩陣中非零元素的個數遠遠小於矩陣元素的總數,並且非零元素沒有分布規律。

非零元素佔全部元素的百分比很小(例如5%以下)的矩陣。有的矩陣非零元素佔全部元素的百分比較大(例如近50%),但它們的分布很有規律,利用這一特點可以避免存放零元素或避免對這些零元素進行運算,這種矩陣仍可稱為稀疏矩陣。

給定乙個n×m的稀疏矩陣a,其第n行的行頻寬定義為:

整個矩陣的頻寬定義為:

二、稀疏矩陣的壓縮儲存

由於稀疏矩陣中非零元素較少,零元素較多,因此可以採用只儲存非零元素的方法來進行壓縮儲存。

由於非零元素分布沒有任何規律,所以在進行壓縮儲存的時侯需要儲存非零元素值的同時還要儲存非零元素在矩陣中的位置,即非零元素所在的行號和列號,也就是在儲存某個元素比如aij的值的同時,還需要儲存該元素所在的行號i和它的列號j,這樣就構成了乙個三元組(i,j,aij)的線性表。

三元組可以採用順序表示方法,也可以採用鏈式表示方法,這樣就產生了對稀疏矩陣的不同壓縮儲存方式。

a、稀疏矩陣的順序實現

若把稀疏矩陣的三元組線性表按順序儲存結構儲存,則稱為稀疏矩陣的三元組順序表。

順序表中除了儲存三元組外,還應該儲存矩陣行數、列數和總的非零元素數目,這樣才能唯一的確定乙個矩陣。

稀疏矩陣的計算速度更快,因為m at l a b只對非零元素進行操作,這是稀疏矩陣的乙個突出的優點.假設矩陣a,b中的矩陣一樣.計算2*a需要一百萬次的浮點運算,而計算2*b只需要2 0 0 0次浮點運算.因為m at l a b不能自動建立稀疏矩陣,所以要用特殊的命令來得到稀疏矩陣.

對於乙個用二維陣列儲存的稀疏矩陣amn,如果假設儲存每個陣列元素需要l個位元組,那麼儲存整個矩陣需要m*n*l個位元組.但是,這些儲存空間的大部分存放的是0元素,從而造成大量的空間浪費.為了節省儲存空間,可以只儲存其中的非0元素.

對於矩陣amn的每個元素aij,知道其行號i和列號j就可以確定其位置.因此對於稀疏矩陣可以用乙個結點來儲存乙個非0元素.該結點可以定義如下:[i,j,aij]  該結點由3個域組成,i:行號,j:列號;aij元素值.這樣的結點被稱為三元組結點.矩陣的每乙個元素qij,由乙個三元組結點(i,j,aij)唯一確定.

例如稀疏矩陣a:

50 0 0 0

10 0 20 0

0 0 0 0

-30 0 -60 5

其對應的三元組表為:

0 0 50

1 0 10

1 2 20

3 0 -30

3 2 -60

3 3 5

解線性方程組的直接法的稀疏矩陣技術,根據不同領域中不同問題的特點,有各種不同稀疏解法。最常用的方法有稀疏去零消元法、等帶或變頻寬消元法、波陣法、子結構法、撕裂和修改技術等,它們都只不過是消元法或三角分解法在各種具體場合下的運用。

各種消元法方案中的關鍵問題都是方程式和未知數的排序問題。確切地說,就是在用某種直接法解稀疏線性方程組時,對方程式和未知數進行適當排序,使得在滿足一定的穩定性要求的前提下,解方程組所需的運算量和存貯量最少。一般說來,這等價於使新產生的非零元(「添補數」)最少。例如,對矩陣

作一步消元法,將a變成

右下角子陣是滿的,a的零元所在位置上產生了許多非零元,破壞了稀疏性,這就要增加許多存貯量和運算量;如果將矩陣a的第一行與最後一行,第一列與最後一列交換,這相當於重新排列方程式和未知數的次序,得矩陣

對ã作消元法時,不會有新的非零元產生,存貯量和運算量大大減少。

與常用的演算法相對應,排序問題可分為以下三類:①預先把矩陣排列成帶型或變頻寬型,並使頻寬或剖面盡可能小;②預先把矩陣排列成塊三角矩陣或其他特殊分塊矩陣;③在稀疏消元法的消元過程中,根據產生添補數最少的原則來確定選主元的次序(這也是一種排序)。對一般矩陣,排序問題是乙個非常困難的問題,因為對乙個給定的矩陣來說,所有可能的次序總數是乙個巨大的數字,可以給出的排序演算法只是按某一特殊準則來確定「最佳次序」的。討論中常用圖論作為工具。

稀疏矩陣的存貯並沒有一種最好的方式,在各種具體情況下,最好的方式與要存貯矩陣的結構及用途有關一種好的標準是矩陣的元素容易查詢而且存貯量少。存貯方式基本上採用壓縮形式,使矩陣中大量的零元素不參加運算,以減少機器的執行時間,並可提高機器處理高階矩陣問題的能力。

對於帶型矩陣,只存貯帶內或剖面內的元素。如對矩陣

可用等頻寬存貯法,在帶的左上角和右下角增添若干個任意元素x,把帶內的元素存放在矩形陣列

對於對稱帶型陣

可用變頻寬存貯法。它需要兩個陣列:①存放剖面內的元素的一維陣列s【1:11】=;②對角元陣列d【1:6】=,在它的第i個位置上存放對角元b

ii在陣列s中的序號。這樣,矩陣的元素b

ij可通過d,i,j在s中找到。對應關係為

並規定d(0)=0。例如,由d=6,d=3,d-3 1>d,可得b

31=s。

對於元素隨機分布的稀疏矩陣,只存貯矩陣的非零元素和必要的檢索資訊。如對

可用行指標列標格式存貯,它需要三個陣列:①根據按行向右的次序,存放矩陣非零元值的陣列v=;②存放v中每一元素在原矩陣中的列標的陣列c={1,2,4,3,1,4,1,3,4};③陣列r={1,4,5,7,10},在它的第i個位置上存放矩陣第i行的第乙個非零元在陣列v中的序號,最後乙個位置上的數等於矩陣非零元素個數加1。矩陣p的任意非零元素可根據r和c的值定出它在v中的位置。例如p

31,先由r=5,r=7,確定第三行有兩個非零元v和v,再檢查v和v的列標,由c=1,c=4,可推出v=p

31。

此外,還有連線表存貯法和超矩陣存貯法等。

稀疏矩陣

稀疏矩陣的研究已經滲入到很多領域。例如,在結構分析、網路理論、電力分配系統、化學工程、攝影測繪學以及管理科學等方面研究中,都出現了上千階直至幾百萬階的稀疏矩陣。 這裡考察從乙個電信總局到其各支局間的通訊問題。不妨假定有五個支局,依次編為1,2,3,4,5號,而總局編為6號,在平面上分別使用①,②,…,⑥這六個點表示(圖2)。如果規定i局和j局之間有通訊關係的話,在點i和j之間用一條線鏈結,對應於矩陣中a

ij塊和a

ji塊非零,i局本身內部也有通訊關係,對應於矩陣a

ii塊非零,那麼,這個問題所匯出的矩陣是乙個雙面鑲邊的塊對角矩陣它是乙個稀疏矩陣。

經典資料結構之稀疏矩陣

資料的儲存形式,不外乎鍊錶和類陣列兩種。使用二維陣列儲存矩陣,如果該矩陣是稀疏的,那麼會浪費很多空間。例如乙個4 4的對角陣,很明顯,只有主對角線上才有元素。那麼使用二維陣列儲存需要16個單位的 儲存空間。然而通過定義乙個結構體 templatestruct sdatatype 然後將其存放於陣列,...

資料結構 稀疏矩陣

稀疏矩陣 矩陣中有效資料的個數遠遠小於無效資料的個數,則可以稱之為稀疏矩陣 如果還像以前那樣將每個稀疏矩陣的資料都儲存起來,則會造成記憶體的很大程度的浪費,所以應用特別的儲存方式。稀疏矩陣的壓縮儲存 使用 三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序先後順序依次存放。矩陣的轉置 將...

資料結構 稀疏矩陣

簡單的說,設矩陣amn中有s個非零元素,若s遠遠小於矩陣元素的總數,則稱a為稀疏矩陣。s與m x n的比稱為矩陣的稀疏因子。當用陣列儲存稀疏矩陣中的元素時,僅有少部分的空間被利用,造成空間的浪費,為了節省儲存空間,可以採用一種壓縮的儲存方法來表示稀疏矩陣。由於非零元素的分布一般是沒有規律的,因此在儲...