变长字节算法
实际上就是128进制:
SimpleX 系列算法
SimpleX系列算法最常见的是Simple9,Simple9是一种字对齐算法,字对齐也就是我们通常使用的表示数字的方式,比如128是一百二十八。Simple9最常用的是利用32个比特位,来作为压缩单位,给定固定大小的压缩单位后,每个压缩单位试图存储多个待压缩的数字:
前四位是指示位,用于表明B是多少,即数据存储区基本构成单元比特宽度是多少。如果数字均为0或1,那用B=1就可以存储,可以同时存储28位数字;如果B=2,可以存储14个范围在0至3的数字,以此类推。
这个算法可以同时压缩/解压多个数字。
PForDelta 算法
PForDelta 算法是目前解压速度最快的一种倒排文件压缩算法。
前面讲的SimpleX算法,实际上,一次压缩多个数值面临困难,因为连续的数值序列有大有小,如果每个数值按照序列中最大的数值来决定比特宽度,很明显对小数值来说会存在空间浪费的情形。
PForDelta希望能在压缩率和压缩解压速度方面找到一个平衡点,对于待编码的连续K个数值(一般K取128,即一次性压缩解压128个数值),先去除其中10%比例的大数,根据剩下90%的数值决定该采取的比特宽度,而10%的大数当做异常数据单独存储:
我们将大数放在异常数据存储区,但也要记载这些数在原始序列中的位置信息,这样解压的时候能够快速恢复原始数据。
文档编号重排序
我们前面提到了D-Gap,我们用D-Gap来存储文档ID,经过前面的PForDelta,我们也知道,数字越小越容易压缩,所以我们希望对文档编号重排序,使得同一个单词倒排列表中的文档编号都尽可能尽可能相近,所得到的D-Gap值也就小了。
为了达到这个目的,我们希望内容越相似的网页,在编排文档编号时,其文档编号越相邻。计算相似性的方法很多,比如TF-IDF。