對稱矩陣壓縮存儲
『壹』 數據結構中對稱矩陣的壓縮存儲的一 一對應關系怎麼算的
先看上面一個:
下三角有i>=j
第1行一個,第2行兩個,。。。,第i-1行i-1個(i, j下標都是從1開始的)
所以第i行前有1+2+...+(i-1)= i(i-1)/2個元素
再看本行,本元素前有j-1個元素
因為計算的是元素之間的位置差,因此就是i(i-1)/2+(j-1)了
下面一個上三角i<j:
對於對稱矩陣有a(i,j)=a(j,i),即行列互換,代入上式即可得
『貳』 設有一個 10 × 10的對稱矩陣 A採用壓縮方式進行存儲,存儲時以按行優先的順序
對稱矩陣且存儲的是下三角,那你首先得看a65是在下三角還是上三角,因為上三角的值是由下三角對稱的值來存儲的。6>5,a65在下三角。按行存儲下三角,從第一行開始分別存儲1,2,3,...個元素,a65表示第7行的第6個元素,那他前面的數據占的位元組就是(1+2+3+4+5+6+5)*2=52,所以a65的地址是下一個53
『叄』 為什麼對稱矩陣可將n²個元素壓縮存儲到n(n+1)/2個元素的一維數組。而非存到n²/2一維數組
n×n階對稱矩陣中,對稱軸上的元素是沒有映像的,它們不重復。
對稱軸一側有n(n-1)/2個元素,對稱軸上有n個元素,這是能夠壓縮的最低限數量,它們的和為:
n(n-1)/2+n=(n²-n+2n)/2=(n²+n)/2
=n(n+1)/2個。
而不是總用元素個數n²/2。
『肆』 一個8×8的對稱矩陣,採用壓縮存儲需要幾個對應的空間
一個8×8的對稱矩陣,採用壓縮存儲需要
1+2+3+...+7+8=36
個對應的空間。
『伍』 設對稱矩陣A壓縮存儲在一維數組B中
首先由 a52能夠得到的信息有:
針對特殊的矩陣壓縮的方式是存儲下三角,而且下三角計算一維數組的下標是:k=i(i+1)/2+j
由a11 存儲在B[0]可以知道 從1開始存儲,計算時需要減1
a36位於上三角中,對應的下三角的點是a63,在根據公式就能算出下標,注意一定要找到下三角的點
『陸』 簡單無向圖的鄰接矩陣是對稱的,可以對其進行壓縮存儲
C
10*10的矩陣存儲上三角,且對角線全為0,不用存儲對角線的值,即可得:1. 第一行存9個數,第二行存8個,......,直到最後一行存0個,進行壓縮存儲。2. 上三角存儲,即存儲的數值均是行標小於列標,(V6,V3)存儲的即為(V3,V6),它前面存入一維數組中的有9+8+2=19個(第一行9個,第二行8個,第三行從V3,V4開始存儲到V3,V6有2個),從1開始,它就放在B【20】
『柒』 數據結構對稱矩陣的壓縮存儲求數據地址
首先要先看看矩陣的行列表,有時會從1開始,但默認是從0開始
很顯然,這里給出的是a[0][0]行列表就是從0開始的
所以a[3][6]就是第3行的第6個元素(這里的3和6指的是下標,實際上是第4行第6個元素)
因為a[3][6]是上三角的元素,所以轉換成下三角就是a[6][3]
因為對稱矩陣只需存儲下三角或上三角
這里以下三角為例
第0行有1個元素,第1行有2個元素,第2行有3個元素.......
第6行第3列前有3個元素
所以Loc(a[3][6]) = Loc(a[6][3]) = Loc(a[0][0]) + ((1+6)*6/2+3)*2 = 1000 + 48 = 1048
計算上三角同理。
反正計算位置時要明白每一行的元素的個數
比如計算 上三角時第一行的元素個數就n個,n是矩陣的階數,然後以下每行減1,最後用等差公式計算就行
公式的話書本上有,自己翻一下書吧。