特殊矩陣:即指非零元素或零元素的分布有一定規律的矩陣,為了節省存儲空間, 我們可以對這類矩陣進行壓縮存儲;即為多個相同的非零元素只分配一個存儲空間;對零元素不分配空間
一、稀疏矩陣
稀疏矩陣:設矩陣A中有s個非零元素,若s遠遠小於矩陣元素的總數,則稱A為稀疏矩陣。

如果我們把整個數據存入內存,如果每個單元格一個字節則需要6*5個字節
我們要對稀疏矩陣進行壓縮存儲: 即只存儲稀疏矩陣中的非零元素和矩陣的大小;采用三元組的表示方式

例如:(6,5,30)矩陣大小、(0,3,34)、(1,1,1)、(1,3,3)、(1,4,59)、(2,0,23)、(2,2,12)、(3,1,45)、(3,3,51)、(3,4,46)、(4,2,34)、(5,0,78)、(5,2,56)、(5,4,2)
稀疏矩陣占用空間大小:7*3個字節
二、三角矩陣:上三角矩陣、下三角矩陣
三角矩陣中的重復元素c(常量)可共享一個存儲空間,其余的元素正好有n(n+1)/2個,因此,三角矩陣可壓縮存儲到向量s[0..n(n+1)/2]中,其中c存放在向量的最后一個分量中
================上三角矩陣=================
以主對角線划分,三角矩陣有上三角和下三角兩種。上三角矩陣,它的下三角(不包括主對角線)中的元素均為常數或者0,在大多數情況下,三角矩陣常數為零。

該圖就是一個上三角矩陣a(m,n)=a(4,4)是一個4階的方陣,將該矩陣壓縮存儲到一維數組S后
| 下標 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 數據 | 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 12 | 16 | 0 |
- 轉換后一維數組的長度:S.length=1+n(n+1)/2
- 最后一個位置:S[n(n+1)/2]=0
- 其他上三角元素的位置在一維數組S的下標:S[i(2n-i+1)/2+j-i ]=a(i,j) ;例如 a(2,3)=S[2*(2*4-2+1)/2+3-2]=S[8]=12
================下三角矩陣=================
以主對角線划分,三角矩陣有上三角和下三角兩種。下三角矩陣,它的上三角(不包括主對角線)中的元素均為常數或者0,在大多數情況下,三角矩陣常數為零。

該圖就是一個上三角矩陣a(m,n)=a(4,4)是一個4階的方陣,將該矩陣壓縮存儲到一維數組S后
| 下標 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 數據 | 1 | 5 | 6 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 0 |
- 轉換后一維數組的長度:S.length=1+n(n+1)/2
- 最后一個位置:S[n(n+1)/2]=0
- 其他下三角元素的位置在一維數組S的下標:S[i(i+1)/2+j]=a(i,j) ;例如 a(2,2)=S[2*(2+1)/2+2]=S[5]=11
三、對稱矩陣:
結論:對稱矩陣的壓縮存儲就是使用長度 array[n(n+1)/2-1] 的 一維數組存儲對稱矩陣
1、下三角
在一個n階方陣A中,若元素滿足下述性質:a(i,j) =a(j,i) 0≤i,j≤n-1 ,則稱A為對稱矩陣

只要存儲矩陣中上三角或者下三角中的元素,讓每個對稱的元素共享一個存儲空間,這樣能節省近一半的存儲空間
轉換后一維數組的長度:S.length=n(n+1)/2
最后一個位置:S[n(n+1)/2-1]
其他下三角元素的位置在一維數組S的下標:S[i(i+1)/2+j]=a(i,j) ;例如 a(2,2)=S[2*(2+1)/2+2]=S[5]=4
2、上三角

其他上三角元素的位置在一維數組S的下標:S[i(2n-i+1)/2+j-i]=a(i,j) ;例如 a(2,2)=S[2*(2*6-2+1)/2+2-2]=S[11]=4
