带状矩阵的压缩存储

对于n*n的方阵,若它的全部非零元素落在一个以主对角线为中心的带状区域中,这个带状区域包含主对角线 ,以及主对角线下面及上面各b条对角线上的元素,那么称该方阵为半带宽为b的带状矩阵。

带状矩阵的特点是:对于矩阵元素a(i,j)!=0,|i-j|<=b。

带状矩阵的存储空间为(2*b+1)*n-2*b。2*b+1为每一行所需空间,所以乘以n行,又因为第一行和最后一行之分配b+1个空间,所以公式中要减去2倍的2*b+1-(b+1)=b。

address(a(i,j))=1+(i*(2*b+1)-b)+(j-i+b)=1+(i*(2*b+1)+j-i)。我把书中的公式做了修改,address(a(i,j))=1。红色字体表示元素所在行之前的元素个数。每一行有2*b+1个元素,之前有i行,由于第一行并没有2*b+1个元素,所以要减去b个。

例子可以看数据结构(李云清版)p85,中间那个方阵第二行第一个元素之前,虽然没有元素但仍分配了空间,所以p86中表格中存储单元4中的内容为空,同理存储单元23 为空。(除第一行和最后一行都分配了2*b+1个空间,所以其他行的空间有的可能用不到)

如有错误,欢迎指正。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值