主要观点:20 世纪 70 年代 Douglas McIlroy 在 AT&T 为 Unix 实现拼写检查器时,面临 64kB 内存中容纳 250kB 字典并快速查找的挑战,他利用数据特性开发出接近理论极限压缩比的算法。
关键信息:
- 1970 年代初 Steve Johnson 写了初始版本,不准确且慢,Douglas McIlroy 重写以提高准确性和性能,从词干去除算法到紧凑字典及快速内存查找数据结构设计。
- 起初用 Bloom 过滤器,后因字典增长改用基于哈希压缩技术,计算出 27 位哈希码,发现哈希差异遵循几何分布,用 Golomb 编码压缩,最终分区加速查找。
- 整个过程涉及多种计算机科学概念,如概率数据结构、信息论、概率论和压缩算法等,虽现代拼写检查器技术不同,但该工程经验仍有价值。
重要细节: - Steve Johnson 一下午写的初始版本简单,会分割输入文件、预处理、排序等再查磁盘字典,不准确且慢。
- Bloom 过滤器用位表和多个哈希函数,添加元素时设对应位为 1,查找时检查位是否为 1 判断元素是否存在,有假阳性但可调整到可接受率,如 1/2000,初始字典 25000 词用 400000 位表和 11 个哈希函数。
- 字典增长到 30000 词后 Bloom 过滤器不适用,改用存储单词哈希,计算出 27 位哈希码,因哈希会碰撞需压缩,通过信息论计算出理论最小编码位数约 13.57 位,存储哈希差异更易压缩,差异遵循几何分布,用 Golomb 编码,形成自相似码模式,编码和解码算法复杂但有效,最终分区加速查找,总存储约 14 位每词。
- 相关参考文献包括 Douglas McIlroy 的论文、Golomb 的论文、Bloom 的论文等,还有关于 Unix 历史等的资料,作者有付费订阅、Buymeacoffee 和 GitHub Sponsor 等支持方式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。