PATRICIA 字典树压缩储存
扩展压缩行储存CRS/列储存CCS方法
概述
在CRS方法的基础上,将维度从二维的行和列扩展到k-维空间(k>2),进而提出了扩展CRS的方法xCRS/xCCS,考虑到CRS和CCS高度的相似性,因此我们只讨论CRS方法。
为了在多维空间使用CRS方法,我们需要选取一种映射,将k维数组转换到CRS方法中的行和列的形式,具体的操作是将原本的k-维空间映射到一个
实现存储形式
根据上面的内容,我们可以得出XCRS对多维数据中的非零元素的储存方式的储存方式:对于数据Value本身和它们在原有的多维矩阵中对应的维度
这里给出xCRS存储的一种案例:
- 对于表中的第一个非零元素,其位置对应着多维数组中的(0,0,0)位置的数据 20.5 ,因此其cind为0。
- 对于第二个非零元素,其位置对应着多维数组中的(0,0,1),因为其在K轴上维度上的索引为1,其cind为1;对于17.0,23.6,14.9 类似,其cind分别为 2,3,3。
- 对于rptr行的每一个偏移值,其计算方式如下:如果我们固定i=0,j=0,任取K时,我们可以得到一个行[(0,0,0),(0,0,1),(0,0,2),(0,0,3)],则其第一个元素(20.5)在val中的起始位置的偏移量offset是0,因此该位置的rptr为0;同理,固定i=0,j=1,任取K时,提出出的行[(0,1,0),(0,1,1),(0,1,2),(0,1,3)],中没有任何的非零元素,因对应位置的rptr为-1,对offset为2的位置(i=0,j=2,任取K)其原理类似,因为offset为0对应的行有两个非零元素,而此行至少有一个非零元素,因此其开始值即为rptr亦为 2,对于剩下的值计算类似。
如何从压缩后的状态还原
对于xCRS类似,还是按着上面一节举的例子,如果要在CRS压缩后的结构中查询原矩阵的
举一个例子,还是再刚才的xCRS表中,加入我们要获取坐标为
公式化映射:
对于K维组
多维空间对应的取值等于
其中
PS:
研究一下xCRS压缩率
当多维数组的稀疏性很高时,xCRS下的压缩比会变差。这是因为存储每一行起始位置的xCRS数组rptr本身可能变得较为稀疏。
转载无需注明来源,放弃所有权利