Folia
← 返回头版

Unix spell检查器如何在64KB内存中运行

1970年代,AT&T的Douglas McIlroy重写了Unix spell检查器,面临着在PDP-11计算机有限内存中存储大规模词典的挑战。1他将字典从25,000个词扩展到30,000个词,同时需要将其压缩到64KB的内存空间内。1

McIlroy采用了多种压缩技术来实现这一目标。1最初实现使用Bloom过滤器,由Dennis Ritchie提供实现代码,配置为400,000比特、11个哈希函数,误报率为1/2000。1随后他转向哈希压缩方案,通过计算得出最优哈希码宽度为27比特。1最终采用Golomb编码实现几何分布压缩,达到了13.60比特每词的压缩率。1

这一压缩率接近理论极限13.57比特每词。1为了进一步提升查询速度,McIlroy加入了分区方案,虽然存储开销增至约14比特每词,但换取了显著的性能提升。1


评论