一、特殊矩阵
1. 上(下)三角矩阵
上三角矩阵,以列为主序,数组下标从0开始:
L
o
c
(
a
i
j
)
=
k
=
(
j
−
1
)
j
2
+
i
−
1
\ Loc(a_{ij})=k=\frac{(j-1)j}2+i-1
Loc(aij)=k=2(j−1)j+i−1,数组大小
M
=
n
(
n
+
1
)
2
\ M=\frac{n(n+1)}2
M=2n(n+1)
下三角矩阵,以行为主序,数组下标从0开始:
L
o
c
(
a
i
j
)
=
k
=
(
i
−
1
)
i
2
+
j
−
1
\ Loc(a_{ij})=k=\frac{(i-1)i}2+j-1
Loc(aij)=k=2(i−1)i+j−1,数组大小
M
=
n
(
n
+
1
)
2
\ M=\frac{n(n+1)}2
M=2n(n+1)
若除三角部分以外的元素均为常数C,存放在数组最后一个元素,则数组大小+1。
2. 对称矩阵
只存储上/下三角部分。
3. 对角矩阵
(2d+1对角矩阵,以行为主序压缩存储)
矩阵元素下标从0开始:
L
o
c
(
a
i
j
)
=
L
o
c
(
a
00
)
+
(
2
d
+
1
)
i
−
d
+
j
−
(
i
−
d
)
=
L
o
c
(
a
00
)
+
(
2
d
+
1
)
i
+
j
−
i
(
0
≤
i
,
j
≤
n
−
1
,
∣
i
−
j
∣
≤
d
)
\begin{aligned} Loc(a_{ij}) &= Loc(a_{00})+(2d+1)i-d+j-(i-d)\\ &=Loc(a_{00})+(2d+1)i+j-i\\ (0&\leq i, j\leq n-1, \left|i-j\right|\leq d) \end{aligned}
Loc(aij)(0=Loc(a00)+(2d+1)i−d+j−(i−d)=Loc(a00)+(2d+1)i+j−i≤i,j≤n−1,∣i−j∣≤d)
矩阵元素下标从1开始:
L
o
c
(
a
i
j
)
=
L
o
c
(
a
11
)
+
(
2
d
+
1
)
(
i
−
1
)
−
d
+
j
−
i
+
d
=
L
o
c
(
a
11
)
+
(
2
d
+
1
)
(
i
−
1
)
+
j
−
i
(
1
≤
i
,
j
≤
n
,
∣
i
−
j
∣
≤
d
)
\begin{aligned} Loc(a_{ij}) &= Loc(a_{11})+(2d+1)(i-1)-d+j-i+d\\ &=Loc(a_{11})+(2d+1)(i-1)+j-i\\ (1&\leq i, j\leq n, \left|i-j\right|\leq d) \end{aligned}
Loc(aij)(1=Loc(a11)+(2d+1)(i−1)−d+j−i+d=Loc(a11)+(2d+1)(i−1)+j−i≤i,j≤n,∣i−j∣≤d)
二、稀疏矩阵
1. 三元组顺序表
2. 行逻辑连接的顺序表
3. 十字链表
每个结点非0元的结点结构:
row, col, val分别代表非0元的行号,列号和值
down为指针,指向该非0元同一列的下一个非0元
right为指针,指向该非0元同一行的下一个非0元