學過線性代數的我們都知道,矩陣其實就是乙個二維的**,那麼資料結構中的矩陣其實也是一樣的,計算機中可以用矩陣這種形式來儲存資料。那麼我麼怎麼表示矩陣呢?在這裡我們仍然可以使用陣列來表示,不過,矩陣始終是個二維的東西,那麼我們怎麼用陣列來表示二維的**?
答案很簡單,使用二維陣列即可!
什麼二維陣列,其實一句話就是:陣列裡面的元素還是陣列。比如說這個亞子。
我們知道計算機中的儲存空間是一維的連續儲存的空間,但是我們這裡描述的這個矩陣是個二維的東西,那麼怎麼把他儲存到計算機中?那我們可以使用對映,將這個二維的東西對映成一維的連續的資料儲存到計算機中,而我們這裡就有兩種對映的方式。
分別是行優先和列優先。
行優先:其實就是先儲存一行的,這樣一行一行的來儲存,就拿上面的這個3階矩陣來說,先儲存第一行,再第二行,最後第三行
實際存下來就是上面這個亞子
那麼按照行優先,是怎麼確定這個矩陣的某乙個元素具體的位置的?那就是使用下面的這個計算公式
一般情況下l1和l2一般都是0,也就是從整個矩陣的第乙個元素開始。
列優先:就是先儲存第一列的資料,然後再儲存第二列的資料。這樣一列一列的儲存,從左至右。
那麼儲存下來呢就是上面這個亞子。
列優先的元素位置計算公式如下:
同樣常見的l1和l2也是從0開始,也就是整個矩陣的第乙個元素開始。
按照我們正常的矩陣儲存,其實對記憶體的空間開銷還是比較大的,所以我們自然就想到了壓縮儲存。
那麼什麼是矩陣的壓縮儲存?其實就是為很多個值相同的元素只分配乙個儲存空間。對零元素不分配儲存空間。那麼這個值相同的元素,我們很容易就想到了線性代數的特殊矩陣,比如單位陣,對角陣,對稱陣等,我們這裡說三個。分別是對稱矩陣、上下三角矩陣、和對角矩陣。
對稱矩陣:就是矩陣的行和列對調之後還是和原來的矩陣相等。那麼這種矩陣就是對稱矩陣。比如這種;
ok,我們知道了對稱矩陣的特性,所以要運用要壓縮儲存上,因為對稱矩陣有這樣的特性,所以我們儲存的時候就不用將元素全部儲存,我們只需要儲存這個鏡面一半的元素就可以了。比如上面這個,我們只存158234這些元素即可,相同的元素不要重複儲存。
三角矩陣:
三對角矩陣:
因為有三條,所以叫三對角矩陣
稀疏矩陣:
其實就是說矩陣中的元素為0的特別多。
那麼我們再儲存的時候其實儲存分零元素是最能節省空間的。但是稀疏矩陣的位置又沒有前面哪些矩陣的規律,所以我們儲存的時候就乾脆把元素的行列下標也存進去。形成乙個三元組。也就是行下標、列下標、元素值。
注意三元組的儲存方式犧牲了隨機儲存的優點。
R資料結構 矩陣
矩陣的建立 在r中用函式matrix 來建立乙個矩陣,使用該函式時需要輸入必要的引數值。matrix data na,nrow 1,ncol 1,byrow false,dimnames null 1.data 向量元素列表 2.nrow行數 3.ncol列數 4.byrow 矩陣是按列優先的方式進...
資料結構 稀疏矩陣
稀疏矩陣 矩陣中有效資料的個數遠遠小於無效資料的個數,則可以稱之為稀疏矩陣 如果還像以前那樣將每個稀疏矩陣的資料都儲存起來,則會造成記憶體的很大程度的浪費,所以應用特別的儲存方式。稀疏矩陣的壓縮儲存 使用 三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序先後順序依次存放。矩陣的轉置 將...
資料結構 稀疏矩陣
簡單的說,設矩陣amn中有s個非零元素,若s遠遠小於矩陣元素的總數,則稱a為稀疏矩陣。s與m x n的比稱為矩陣的稀疏因子。當用陣列儲存稀疏矩陣中的元素時,僅有少部分的空間被利用,造成空間的浪費,為了節省儲存空間,可以採用一種壓縮的儲存方法來表示稀疏矩陣。由於非零元素的分布一般是沒有規律的,因此在儲...