1. 压缩目的: 将整个词典放在内存,避免多次访问硬盘
2. 假设压缩前词典采用定长数组格式,每个数组的类型如下:
struct
{
char term[k];
int freq;
pointer posting;
}
假设指针长度为4, 则一个term耗费的内存为k + 4 + 4, 这里显然的浪费是在k,因为必须要指定一个定长的k。
因此一种压缩思路就是,将所有的term组装起来放在一个数组里,然后通过指针来索引,结构如下:
然后采用二分查找方式进行查找
在激进一点,可以在每个词开头前存入长度,同时几个term共用一个指针,但这样带来的问题就是查询效率的降低