今天寫乙個程式,簡單描述就是在二維座標系中, 存在若干個點,求每個點之間的距離, 首先想到的是用鄰接矩陣,由於點很多,並且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...