知识卡片
内存预分配必须按最坏情况定界,不能按平均情况估算
内容
内存内倒排要在扫描文本前为每个词的倒排列表预先分配固定大小内存,写入过程中一旦超出就无法扩展。这把Golomb编码参数选择从”求平均码长最短”变成”求最坏情况码长上界最小”——让平均情况最优的参数b未必能让最坏情况膨胀可控,必须专门推导(即Rice码)。代价是平均压缩率略微下降,换来”绝不溢出”这个硬约束——资源必须提前一次性分配且无法追加时,优化目标就要从”平均最优”切换成”最坏情况有界”。
参考来源
- 位置:第5章《索引构造》「内存内倒排」小节(源文件:_chapter-text/ch05.txt)
- 结论依据:原文明确说明内存必须提前分配、不能溢出,因此要用最坏情况上界而非平均情况来选择编码参数,Rice码即为此设计,直接支持卡片论点。
- 原始内容:"值可能造成的最坏情况的严格上界应该是需要的。因为空间必须提前分配,如果压缩结果比期望的要大,则很难进行空间上的扩展……不能容忍的是任何一个倒排列表因为空间不够而产生溢出,这是因为在任何倒排列表写入前空间必须提前分配,并且不可撤销……选择为2的乘幂形式也被称为'Rice码'。"