压缩存储
为多个值相同的元素只分配一个存储空间,对零元素不分配存储空间,以节省存储空间
特殊矩阵
拥有很多相同元素或者零元素的矩阵,并且分布有一定规律性,例如:对称矩阵,上三角矩阵等
特殊矩阵的压缩存储方法
找出特殊矩阵中值相同的矩阵元素的分布规律,把那些呈现规律性分布的、值相同的多个矩阵元素压缩存储到一个存储空间中
对称矩阵
如果一个
n
×
n
n\times n
n×n 矩阵中任意一个元素
a
i
,
j
a_{i,j}
ai,j 均满足:
a
i
,
j
=
a
j
,
i
(0)
a_{i,j} = a_{j,i}\tag{0}
ai,j=aj,i(0)
则这样的矩阵就是一个对称矩阵(symmetric matrix),这样,我们只需要存储对角线以及对角线一边的上三角部分,实现矩阵的压缩存储。假如存储的是上三角部分,则:
M
[
i
]
[
j
]
=
A
[
j
(
j
+
1
)
/
2
+
i
]
(1)
M[i][j] = A[j(j+1)/2+i]\tag{1}
M[i][j]=A[j(j+1)/2+i](1)
其中:
- 矩阵的大小为 n × n n\times n n×n
- 0 ≤ i , j ≤ n − 1 0\le i,j \le n-1 0≤i,j≤n−1
三角矩阵
如果是上三角矩阵则与前面的对称矩阵相同,如果是下三角矩阵,则只需要将
i
i
i 换为
j
j
j 即可:
M
[
i
]
[
j
]
=
A
[
i
(
i
+
1
)
/
2
+
j
]
(2)
M[i][j] = A[i(i+1)/2+j]\tag{2}
M[i][j]=A[i(i+1)/2+j](2)
三对角矩阵
三对角矩阵例如:
[
a
1
,
1
a
1
,
2
0
0
…
0
0
0
0
a
2
,
1
a
2
,
2
a
2
,
3
0
…
0
0
0
0
0
a
3
,
2
a
3
,
3
a
3
,
4
…
0
0
0
0
⋮
⋱
⋮
0
0
0
0
…
a
n
−
2
,
n
−
3
a
n
−
2
,
n
−
2
a
n
−
2
,
n
−
1
0
0
0
0
0
…
0
a
n
−
1
,
n
−
2
a
n
−
1
,
n
−
1
a
n
−
1
,
n
0
0
0
0
…
0
0
a
n
,
n
−
1
a
n
,
n
]
(3)
\begin{aligned} \left[ \begin{matrix} a_{1,1} & a_{1,2} & 0 & 0 & \dots & 0 & 0 & 0 & 0\\ a_{2,1} & a_{2,2} & a_{2,3} & 0 & \dots & 0 & 0 & 0 & 0\\ 0 & a_{3,2} & a_{3,3} & a_{3,4} & \dots & 0 & 0 & 0 & 0\\ &&\vdots&&\ddots&&\vdots \\ 0&0&0&0&\dots&a_{n-2,n-3}&a_{n-2,n-2}&a_{n-2,n-1}&0\\ 0&0&0&0&\dots&0&a_{n-1,n-2}&a_{n-1,n-1}&a_{n-1,n}\\ 0&0&0&0&\dots&0&0&a_{n,n-1}&a_{n,n} \end{matrix} \right] \end{aligned} \tag{3}
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡a1,1a2,10000a1,2a2,2a3,20000a2,3a3,3⋮00000a3,4000………⋱………000an−2,n−300000⋮an−2,n−2an−1,n−20000an−2,n−1an−1,n−1an,n−10000an−1,nan,n⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤(3)
这样的矩阵称为三对角矩阵,其中第一列和最后一列只有两个元素,所以显然:
- 元素总个数就是 3 n − 2 3n-2 3n−2 个
- 第 i i i 行前面的 i − 1 i-1 i−1 行的元素个数是 3 i − 1 3i-1 3i−1 个
则我们有:
M
[
i
]
[
j
]
=
A
[
3
i
+
j
−
1
]
(4)
M[i][j] = A[3i + j - 1]\tag{4}
M[i][j]=A[3i+j−1](4)
其中,
0
≤
i
,
j
≤
n
−
1
0\le i,j\le n-1
0≤i,j≤n−1,如果采用列优先的方法来表示,只需要将两个下标互换即可
本文详细介绍特殊矩阵如对称矩阵、三角矩阵及三对角矩阵的压缩存储方法,旨在通过节省存储空间,提高数据处理效率。
741

被折叠的 条评论
为什么被折叠?



