對稱矩陣的壓縮

2021-06-28 10:26:33 字數 1032 閱讀 2096

今天寫乙個程式,簡單描述就是在二維座標系中, 存在若干個點,求每個點之間的距離, 首先想到的是用鄰接矩陣,由於點很多,並且a距離b 和b距離a 肯定是一樣的,用矩陣表示是乙個對稱矩陣,考慮使用對稱矩陣壓縮。

a_ij表示第i行j列的資料

由上圖可以知道,a_ij和a_ji的值是一樣,並且我的需求中,對角線上的資料都是0,然後我們就可以用乙個三角矩陣來表示。

具體的壓縮網上很多資料,我這裡主要是寫二維矩陣座標轉一維的座標的推理

我們假設有 n行n列,

我們要求 a_ij在對應的一維陣列中的下標(我們一維陣列的長度為 n*(n-1)/2  注意:我的下三角矩陣是沒有包含對角線的資料的

)1.先找i-1行的資料個數

0+1+2+..+(i-1)   下標是從0開始的,並且 i>0

其中 0到i-1的行數為  (i-1)-(0)+1=i

根據等差數列求和公式 s_n=0*i+i*(i-1)/2

2.找出i行的位置:  j

所以,得出的k  = i*(i-1)/2+j   if i>j

0   if i=j

j*(j-1)/2+i  if j

知道怎麼推出來這個公式,肯定比自己去記 更準確,萬一記錯了呢~

同理 推一下 上三角矩陣的壓縮(我們一維陣列的長度為 n*(n-1)/2  注意:我的下三角矩陣是沒有包含對角線的資料的

)1.先找i-1行的資料個數  0 到 i-1行

(n-1)+(n-2)+..(n-i)

s_n=(n-1)*i+i*(i-1)*(-1)/2=i*(2n-i-1)/2

2.找出i行的位置:j-i 

所以 i*(2n-i-1)/2+j-i-1(-1 是因為我們下標是從0開始的)

k= i*(2n-i-1)/2+j-i-1  if j>i

0                       if j=i

j*(2n-j-1)/2+i-j-1  if i

對稱矩陣及對稱矩陣的壓縮儲存

1.對稱矩陣 設乙個n n的方陣a,a中任意元素aij,當且僅當aij aji 0 i n 1 0 j n 1 則矩陣a是對稱矩陣。以矩陣的對角線為分隔,分為上三角和下三角。2.壓縮儲存稱矩陣儲存時只需要儲存上三角 下三角的資料,所以最多儲存n n 1 2個資料 根據等差數列的前n項和可求得 3.對...

對稱矩陣 壓縮儲存

對稱矩陣及對稱矩陣的壓縮儲存 設乙個n n的方陣a,a中任意元素aij,當且僅當aij aji 0 i n 1 0 j n 1 則矩陣a是對稱矩陣。以矩陣的對角線為分隔,分為上三角和下三角。壓縮儲存稱矩陣儲存時只需要儲存上三角 下三角的資料,所以最多儲存n n 1 2個資料。對稱矩陣和壓縮儲存的對應...

對稱矩陣的壓縮儲存

眾所周知,對稱矩陣的定義如下 設乙個n n的方陣a,a中任意元素aij,當且僅當aijj aji 0 i 壓縮儲存對稱矩陣時只需儲存上三角形或下三角形的資料即可,故最多可儲存n n 1 2個資料。以下 是以對稱矩陣的下三角形儲存 template class symmetricmatrix else...