關於矩陣的幾種儲存方式 Hayden Blog

2021-08-09 10:26:46 字數 1404 閱讀 3429

1.矩陣

關於矩陣我們就不解釋定義了,這裡只說一下矩陣一旦被定義之後,矩陣的行數和列數就不能被改變。

對於一般線性結構的矩陣,我們採用順序儲存結構,以二維陣列來儲存。
以二維陣列儲存分為兩種主要形式:

這樣對於乙個矩陣,一旦確定了行數和列數,便可以為其分配儲存空間,反之,如果給定了矩陣中的第乙個元素的存放位址(basic address),我們就可以將矩陣中元素的儲存位址表示為其下標的線性函式,這樣就可以隨機讀取或查詢矩陣中的任意乙個元素。

比如:loc(a ij)  = loc(a 11) + [(i-1)*n+(j-1)]*d 我們假設每個元素占用d個單元,aij就是前面所有元素占用的單元數加上基位址。

2.一些特殊的矩陣儲存

我們知道如果用乙個矩陣中可能會有情況是我們用不上二維陣列裡面所有的空間,也就是說乙個矩陣中我們可能會用到的元素和他占用的空間相差是很大的,這就意味著會造成空間的浪費,因為我們是要為每乙個元素開闢儲存空間的,比如對於下面的一些特殊矩陣,我們就可以使用特殊的儲存方法來儲存他們

對於對稱矩陣,我們就沒有必要為每乙個元素開闢儲存空間了,因為他們有一部分的想同的

我們可以以行為序來儲存對稱矩陣

我們讓第一行放乙個元素,第二行放兩個元素,第三行放三個元素,以此類推......就是說我們會真正儲存的元素個數是 1 + 2 + 3 + …… + n = n*(n+1)/2 等差數列就不多說了

這樣我們定義乙個sa[n*(n+1)/2] 的陣列來儲存元素,現在我們要訪問 a ij元素!!!敲黑板了

此時陣列中 代表的a ij 的元素之前就 i 行 ,有 1 + 2 + 3 + ...... i = i(i+1)/2 個元素,因此k(a ij的下標) = i(i+1)/2 + j

因為a ij = a ji ,所以同理以上 ,將i和j互換即可 得到:k = j(j+1)/2 + i;

這樣一來:

k = i*(i+1)+j i>=j

k = j*(j+1)+i i

以上就是對稱矩陣的儲存方式,等下有時間再更新壓縮儲存的,要去上課了 orz .... 

遍歷矩陣的幾種方式

class solution public vectorfinddiagonalorder vector matrix vectorres int m matrix.size if m 0 return res int n matrix 0 size int x 0,y 0 res.push bac...

iOS儲存的幾種方式

1.寫檔案 nsdata dat nsdata alloc initwithcontentsofurl nsurl urlwithstring imageurl nsstring documents nsstring stringwithformat documentdataf dat writet...

稀疏矩陣的儲存方式

稀疏矩陣就是指乙個矩陣中的大部分元素都是0或者是某乙個相同的元素,而稀疏矩陣往往有一些有規律的形式,比如上三角 下三角等等,這種有規律的矩陣又稱為特殊矩陣。特殊矩陣的儲存需要根據特殊矩陣哪點特殊,然後用數學的手段來進行儲存,這裡就不展開了。我們只講一般情況下的稀疏矩陣的儲存方式。儲存方式常見的有兩大...