3.4特殊矩阵和压缩矩阵

3.4特殊矩阵和压缩矩阵

类比数组:

一维数组:

[外链图片转存失败(img-3VhpwSVS-1566310768733)(C:\Users\liuhao\AppData\Roaming\Typora\typora-user-images\1566305353319.png)]

二维数组,采用映射的方法:按行优先和按列优先

行优先:

[外链图片转存失败(img-l07oqNwx-1566310768735)(C:\Users\liuhao\AppData\Roaming\Typora\typora-user-images\1566305841309.png)]

列优先:

[外链图片转存失败(img-R64V8NTh-1566310768735)(assets/1566305996842.png)]

矩阵的压缩存储

矩阵的压缩存储:指多个值相同的元素只分配一个存储空间,队零元素不分配存储空间。

特殊矩阵:指具有许多相同矩阵元素或零元素,并且这些相同矩阵元素或者零元素的分布具有一定规律的矩阵。(对称矩阵、上(下)三角矩阵、对角矩阵)

对称矩阵 :若一个n阶方阵A[1…n][1…n]中的任意一个元素ai.j,都有ai,j=aj,i(1<=i,j<=n),则称其为对称矩阵。

[外链图片转存失败(img-ssSRB8Pi-1566310768735)(assets/1566306770503.png)]

将矩阵存储中的元素存储到一维数组B[n(n+1)/2]中,矩阵中的元素ai,对应数组B中下标为k的元素。

推理过程:

下三角区和对角线上的元素:

@存储在下三角区和对角线上的元素ai,j

@第一行存 一个,第二行存两个,第三行存 三个,第i行存储i个元素,第i行存j个。

@所以ai,j是数组B中的第1+2+3+…(i-1)+j=i(i-1)/2+j个元素。

@如果数组B下标从0开始,那么ai,j元素存在下标为i(i-1)/2+j-1的位置,即k=i(i-1)/2+j-1的位置即k=i(i-1)/2+j-1;

上三角区:(和下三角对称 i和j交换)

k=j(j-1)/2+i-1;

三角矩阵:

定义:下三角矩阵的上三角区都是同一常数,上三角矩阵的下三角区都是同一常数。

存储思想:与对称矩阵类似,不同之处在于存储完下三角去和主对角线上的元素之后,紧接着存储主对角线上方的常量一次,故可以将下三角矩阵A[1…n][1…n]压缩存储在B[n(n+1)/2+1]中。

下三角矩阵:

对于下三角区和对角线上的元素存储和对称矩阵是一样的。即对于下三角元素,如果数组B中下标从0开始,那么ai,j元素存在下标为k=i(i-1)/2+j-1的位置,对于上三角元素存储在下标为n(n+1)/2位置即可。

上三角矩阵:

推理过程:

@存储在下三角区和对角线上的元素ai,j。

@第一行存 n个,第一行存n-1个,第二行存 n-2个,第i-1行存储n-(i-2)个元素,ai,j是第i行的第j-i+1个元素。

@k=n+n-1+n-2+…+n-(i-2)+j-i+1=(2n-i+2)(i-1)/2+j-i+1-1=(2n-i+2)(i-1)/2+j-i;

对于下三角元素存储在下标为n(n+1)/2位置即可。

三对角矩阵:

定义:也称为带状矩阵。对于n阶方阵A中的任意元素ai.j,当|i-j|>1时,有ai,j=0(1<=i,j<=n),则称为三对角矩阵。

存储思想:将3条对角线上的元素按行优先方式存放在一维数组B中

推理过程:

@i=1时,k=j-1

@i>1,第一行存储两个元素,接下来除去最后一行和第一行一共i-2行,每行都有三个元素ai,j在后一行时j-i+1个元素。所以ai,j在数组中时第2+(i-2)3+j-i+2=2i+j-2个元素,所以下标k=2*i+j-3。

若已知对应在一维数组中的下标K,求其在二维数组中的位置,

推到过程:

@位置k的元素的实际是第k+1个元素,前面一共k个元素

@出去第一行,还有k-2个元素,这k-2每达到3,那么k+1元素就进入下一行,行数加一,而且是从第二行开始的。如果不到三个,向下取整。

即i=[(k-2)/3+2]=[(k+1)/3+1]

@由于在第i行,前i行有2+3*(i-2)=3i-4个元素,所以是第i行非0元素的第k±(3i-4)=k-3*i+5

@第i行前面有i-2(i>2)个0,所以j=k-3i+5+i=k-2i+3。

稀疏矩阵:

定义:矩阵中的元素个数s相对于矩阵中非0元素个数t个数来说非常多,即s远大于t。

三元组存储:

[外链图片转存失败(img-VJtC0o9A-1566310768736)(assets/1566310696056.png)]

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值