我的離散老師一直建議我們用矩陣來儲存資訊,尤其是兩個事物的關係資訊(比如兩個元素相關聯,比如圖)
但如果要儲存的關係是雙向的,也就是無向圖,那麼用矩陣就會造成部分浪費,比如從a到b有路徑,那麼只需要在陣列[a][b]位置置1即可,[b][a]再置1就顯得浪費了
這種關係矩陣往往是對稱矩陣所以需要
給相同元素只提供乙個位置,以節約記憶體空間的占用問題
進一步來說,就是把重複的部分都去除,只保留有用資訊
原始的儲存結構應該是這樣的
現在應該是
但是
如果還是用二維陣列作為儲存結構,其開闢的空間還是客觀存在的,無法達到節約空間的目的
所以應該更改儲存方式為—— 一維陣列
也就是這樣
如果是n行n列的二維陣列(起始位置為1)儲存到下標從0開始的陣列中,那麼就是:
其與陣列中位置的對應關係
第i行j列元素為第 1+2+3+……+i-1+j 個,即 i*(i-1)/2+j
由於陣列是從0開始計數,所以aij在陣列 i*(i-1)/2+j-1 號位上(注意這裡是邏輯二維矩陣對映到物理一維陣列的公式)
比如i=6,j=4,那麼就在第18號位上
如果是物理層面上的二維陣列到一維陣列
那麼應該是 i*(i+1)/2+j
其轉換**為
#include
using namespace std;
intmain()
,,,,
};int b[15]
;for
(int i =
0; i <
5; i++)}
for(
int i =
0; i <
15; i++
)}
矩陣的壓縮儲存
在編寫程式時往往都是二維陣列表示矩陣,然而在數值分析中經常出現一些階數很高的的矩陣同時在距震中有很多值相同的元素,或者是零元素,為了節省空間,可以對這類矩陣進行壓縮儲存,所謂的壓縮儲存就是,多個值相同的元之分配乙個儲存空間,對零元不分配空間。若值相同的元素或零元素在矩陣中分布有一定規律,則稱矩陣為特...
矩陣的壓縮儲存
一 壓縮儲存 指為多個值相同的元只分配乙個儲存空間,對零元不分配空間。二 矩陣分類 1 假如值相同的元素或者零元素在矩陣中的分配有一定的規律,則我們稱此類矩陣為特殊矩陣 反之,稱為稀疏矩陣。2 n階對稱矩陣 滿足aij aji 1 i,j n 3 稀疏矩陣 非零元較零元少,且分布沒有規律。三 n階對...
矩陣壓縮儲存
在c中矩陣的表示是用二維陣列。那麼首先要搞清楚陣列行列與矩陣行列的對應。在c語言中二維陣列是按行儲存的。即順序儲存每一行。第一行,第二行。最後一行 看一下例子 陣列數量替換成arrs i j 方便說明。int arrs i j test 二維陣列記憶體位置 for i 0 i 3 i 在上例中i表示...