针对稀疏线性系统的特点——0元素比较多,其存储结构主要有四种形式:二维数组、三元组(Triplet Format)、行压缩(Compressed Row Format)[1]、修正的行压缩(Modified Compressed Row Format)[1]。
前三种存储结构都有各自的优势。用二维数组存储稀疏线性系统能实现随机访问,操作效率比较高,但是,空间利用率很低,特别是当稀疏线性系统的密度较小时,尤为如此。用三元组的存储形式,只保存矩阵的非零元素,可以提高空间的利用率,但是无法随机访问矩阵元素,并且基于此结构的各项操作都复杂了很多,元素定位比较复杂。而行压缩的存储结构是对三元组形式的一种改进,它比三元组结构更加节省空间,但是操作数据更加复杂。修正的行压缩(MCRF)又是对行压缩的一种改进,它比行压缩结构节省空间,而没有增加数据操作的复杂度。
1 MCRF介绍
MCRF存储结构采用两个数组,只保存稀疏线性系统的非零元素信息,同时也记录每行非零元素的个数以及每行第一个非零非对角元素的位置信息。下面针对如下的矩阵,详细介绍MCRF存储结构。
修正的行压缩(MCRF)存储结构只存储矩阵非零元素的值、非零非对角元素的列标、每行第一个非零非对角元素的序号。
该方法开设两个长度为总的非零元素个数(total_elem)加1的一维数组value[]和index[]。其中value[]的[0, total_ln)(total_ln为总行数)位置存放对角元素的值,第total_ln位置可以空置,后续位置按行优先的顺序存放非零非对角元素的值。Index[]前[0, total_ln]个位置存放每行第一个非零非对角元素的序号。Index后续的空间存放value[]对应元素的列标。
下表为数据(1)所示矩阵的存储结构: