数据结构(五)数组及特殊矩阵的压缩存储

 

特殊矩阵的压缩存储

数组

  数组能够看做线性表的推广。数组做为一种数据结构其特色是结构中的元素自己能够是具备某种结构的数据,但属于同一数据类型,数组是一个具备固定格式和数量的数据有序集, 每个数据元素有惟一的一组下标来标识,所以,在数组上不能作插入、删除数据元素的操做。 数组

一、数组的定义和运算

( 1 )数组的定义数据结构

  从逻辑结构上,数组能够当作是通常线性表的扩充。一维数组即为线性表, 而二维数组能够定义为“其数据元素为一维数组(线性表)”的线性表。依此类推, 便可获得多维数组的定义。N 维数组是“数据元素为 N-1 维数组”的线性表。函数

  由数组结构能够看出,数组中的每个元素由一个值和一组下标来描述。 “值”表明数组中元素的数据信息,一组下标用来描述该元素在数组中的相对位 置信息。数组的维数不一样,描述其相对位置的下标的个数也不一样。spa

( 2 )数组的运算blog

  数组是一组有固定个数的元素的集合。即,一旦定义了数组的维数和每一维 的上、下限,数组中元素的的个数就固定了。例如二维数组 A3 × 4 ,它有 3 行、 4 列,即由 12 个元素组成。因为这个性质,使得对数组的操做不像对线性表的操做 那样能够在表中任意一个合法的位置插入或删除一个元素。对于数组的操做通常 只有两类: ①得到特定位置的元素值; ②修改特定位置的元素值。 所以数组的操做主要是数据元素的定位,即给定元素的下标,获得该元素在 计算机中的存放位置。其本质上就是地址计算问题。内存

( 3 )数组的抽象数据类型定义数学

数组的抽象数据类型定义以下: ADT Array{变量

 

注意:这里定义的数组与 C 语言的数组略有不一样,下标统一从 1 开始。数据类型

二、数组的顺序存储

一般在各类高级语言中数组一旦被定义,每一维的大小及上下界都不能改变。方法

  一般,数组在内存被映象为向量,即用向量做 为数组的一种存储结构,这是由于内存的地址空间是一维的,数组的行列固定后,经过一个 映象函数,则可根据数组元素的下标获得它的存储地址。

  对于一维数组按下标顺序分配便可。对多维数组分配时,要把它的元素映象存储在一维存储器中,通常有两种存储方式:一是以行为主序(或先行后列)的顺序存放,另外一种是以列为主序(先列后行)的顺序存放。

  设有 m×n 二维数组 Amn,下面咱们看按元素的下标求其地址的计算:

  以“以行为主序”的分配为例:设数组的基址为 LOC(a11),每一个数组元素占据 d 个地址单 元,那么 aij 的物理地址可用一线性寻址函数计算:

  LOC(aij) = LOC(a11) + ( (i-1)*n + j-1 ) * d

  这是由于数组元素 aij的前面有 i-1 行,每一行的元素个数为 n,在第 i 行中它的前面还有 j-1 个数组元素。

  在 C 语言中,数组中每一维的下界定义为 0,则: LOC(aij) = LOC(a00) + ( i*n + j ) * d 推广到通常的二维数组:A[c1...d1][c2...d2],则 aij的物理地址计算函数为:

  LOC(aij)=LOC(a c1 c2)+( (i- c1) *( d2 - c2 + 1)+ (j- c2) )d

 

规律分布特殊矩阵的压缩存储

规律分布的特殊矩阵

  元素分布具备必定规律的矩阵称为规律分布的特殊矩阵,如三角矩阵(方阵的上或下三 角全为零)和带状矩阵(若干条对角线含有非零元)。这类矩阵中元素分布的规律能够用数学公 式来反映。已知二维矩阵 A 中元素下标 i 和 j,做为转换函数 f 的自变量,计算出到一维内存空 间的地址值 K,即 A i=B[ K],实现了原二维矩阵到压缩存储后的一维数组的存储映射。

1 .三角矩阵

  三角矩阵大致分为三类:下三角矩阵、上三角矩阵、对称矩阵。对于一个 n 阶矩阵 A 来 说:若当 i <j 时,有 a ij =c(典型状况 c=0 ),则称此矩阵为下三角矩阵;若当 i>j 时,有 aij =c(典型情 况 c=0 ),则称此矩阵为上三角矩阵;若矩阵中的全部元素均知足 aij =aji,则称此矩阵为对称矩 阵。

2 .带状矩阵

( 1 )带状矩阵描述:在矩阵中的全部非零元素都集中在以主对角线为中心的带状区域中。

( 2 )三对角带状矩阵特色

 

( 3 )三对角带状矩阵压缩存储方法

  三对角带状矩阵的压缩存储原则为:将带状区域上的非零元素按行序存储。

其压缩存储方法以下:

①肯定存储该矩阵所需的一维向量空间的大小 假设每一个非零元素所占空间的大小为 size 个单元。从图 3 中观察得知,在三对角带状矩 阵中,除了第一行和最后一行只有2个非零元素外,其他各行均有3个非零元素,由此获得:所需 一维向量空间的大小为: 2 +2 +3 ×( n -2 )= 3 n-2 。

②肯定非零元素在一维数组空间中的地址 Loc ( A i)= Loc ( A 1 )+(前 i-1 行非零元素个数+第 i 行中 aij 前非零元素个 数)*size 前 i-1 行元素个数=3 ×( i-1 )- 1 (由于第 1 行只有 2 个非零元素); 第 i 行中 ai j 前非零元素个数=j-i +1 ,其中

 

由此获得: Loc ( A i)= Loc( A 1 )+( 3 ( i-1 )- 1 +j-i +1)size = Loc( A 1 )+( 2 ( i-1 )+ j -1)size

相关文章
相关标签/搜索