对于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个空间,所以其他行的空间有的可能用不到)
如有错误,欢迎指正。