矩 阵 压 缩

1. 对称矩阵压缩

[ a x x x x x b x x x x x c x x x x x d x x x x x e ] \begin{bmatrix} a& x& x& x&x \\ x& b& x& x&x \\ x& x& c& x&x \\ x& x& x& d&x \\ x& x& x& x&e \end{bmatrix} axxxxxbxxxxxcxxxxxdxxxxxe
在这里插入图片描述
[ a x b x x c x x x d x x x x e ] \begin{bmatrix} a& & & & \\ x& b& & & \\ x& x& c& & \\ x& x& x& d& \\ x& x& x& x&e \end{bmatrix} axxxxbxxxcxxdxe

二维数组中 a i j a_{ij} aij在一维数组中的下标:
k = i ( i − 1 ) / 2 + j − 1 k=i(i-1)/2+j-1 k=i(i1)/2+j1

对于对称矩阵我们可以只保存下三角(包括对角线上的元素),或上三角的元素

原来需要的存储单元个数 n × n n \times n n×n 变成了 ( n ( n + 1 ) / 2 ) (n(n+1)/2) (n(n+1)/2)

2. 上下三角矩阵压缩

2.1 下三角对称矩阵压缩

对于
[ a 11 a 21 a 22 a 31 a 32 a 33 a 41 a 42 a 43 a 44 a 51 a 52 a 53 a 54 a 55 ] \begin{bmatrix} a_{11}& & & & \\ a_{21}& a_{22}& & & \\ a_{31}& a_{32}& a_{33}& & \\ a_{41}& a_{42}& a_{43}& a_{44}& \\ a_{51}& a_{52}& a_{53}& a_{54}& a_{55} \end{bmatrix} a11a21a31a41a51a22a32a42a52a33a43a53a44a54a55

[ a 11 . . . a i 1 . . . a i j . . . . . . a n 1 . . . a n j . . . a n n ] \begin{bmatrix} a_{11}& & & & \\ ...\\ a_{i1}& ...& a_{ij}& ...& \\ ... \\ a_{n1}& ...& a_{nj}& ...& a_{nn} \end{bmatrix} \\ a11...ai1...an1......aijanj......ann
转化为
[ a 11 . . . a i 1 . . . a i j . . . a n 1 . . . a n j . . . a n n ] \begin{bmatrix} a_{11}& ...& a_{i1}& ...& a_{ij}& ...& a_{n1}& ...& a_{nj}& ...& a_{nn}&\\ \end{bmatrix} \\ [a11...ai1...aij...an1...anj...ann]
原矩阵中的下标 i , j i,j i,j,对应于数组中的下标 k k k
在这里插入图片描述

2.2 上三角对称矩阵压缩

对于
[ a 11 a 12 a 13 a 14 a 22 a 23 a 24 a 33 a 34 a 44 ] \begin{bmatrix} a_{11}& a_{12}& a_{13}& a_{14}\\ & a_{22}& a_{23}& a_{24}\\ & & a_{33}& a_{34}\\ & & & a_{44}\\ \end{bmatrix} a11a12a22a13a23a33a14a24a34a44

[ a 11 . . . a 1 j . . . a 1 n . . . . . . a i j . . . a i n . . . a n n ] \begin{bmatrix} a_{11}& ...& a_{1j}& ...& a_{1n}\\ & & ...& &...\\ & & a_{ij}& ...& a_{in}\\ & & & &... \\ & & & & a_{nn} \end{bmatrix} \\ a11...a1j...aij......a1n...ain...ann
转化为
[ a 11 . . . a 1 j . . . a 1 n . . . a i j . . . a i n . . . a n n ] \begin{bmatrix} a_{11}& ...& a_{1j}& ...& a_{1n}& ...& a_{ij}& ...& a_{in}& ...& a_{nn}&\\ \end{bmatrix} \\ [a11...a1j...a1n...aij...ain...ann]
原矩阵中的下标 i , j i,j i,j,对应于数组中的下标 k k k
在这里插入图片描述
即:
k = ( i − 1 ) ( 2 n − i + 2 ) / 2 + j − i k=(i-1)(2n-i+2)/2+j-i k=(i1)(2ni+2)/2+ji

2. 对角矩阵压缩

将矩阵
[ a 11 a 12 0 0 0 a 21 a 22 a 23 0 0 0 a 32 a 33 a 34 0 0 0 a 43 a 44 a 45 0 0 0 a 54 a 55 ] \begin{bmatrix} a_{11}& a_{12}& 0& 0&0 \\ a_{21}& a_{22}& a_{23}&0 &0 \\ 0& a_{32}& a_{33}& a_{34}&0 \\ 0& 0& a_{43}& a_{44}& a_{45}\\ 0& 0& 0&a_{54} &a_{55} \end{bmatrix} a11a21000a12a22a32000a23a33a43000a34a44a54000a45a55
压缩为一维矩阵
[ a 11 a 12 a 21 a 22 a 23 a 32 a 33 a 34 a 43 a 44 a 45 a 54 a 55 ] \begin{bmatrix} a_{11}& a_{12}& a_{21}& a_{22}& a_{23}& a_{32}& a_{33}& a_{34}& a_{43}& a_{44}& a_{45}& a_{54}& a_{55} \end{bmatrix} [a11a12a21a22a23a32a33a34a43a44a45a54a55]
原来 n × n n \times n n×n个存储单元现在只要 3 n − 2 3n-2 3n2

原矩阵中的下标 i , j i,j i,j,对应于数组中的下标 k k k
在这里插入图片描述

k = 2 i + j − 3 k=2i+j-3 k=2i+j3
已知 k k k:
{ i = ⌊ ( k + 1 ) / 3 ⌋ + 1 j = k − 2 i + 3 \begin{cases} i=\left \lfloor (k+1)/3 \right \rfloor+1 \\ j=k-2i+3 \end{cases} {i=(k+1)/3+1j=k2i+3

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SVIP_Quanw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值