【发布时间】:2019-11-14 15:46:37
【问题描述】:
在 hyphenation algorithms 中可以看到 Bloom 过滤器大放异彩的经典示例。甚至是original paper on Bloom filters中给出的例子。
我不明白如何在断字算法中使用布隆过滤器。
断字算法被定义为接受一个输入词并返回该词可以断字的可能方式。
布隆过滤器是否会同时包含hyph-enation 和hyphena-tion,并且客户端代码会查询过滤器以查找h-yphenation、hy-phenation、hyp-henation、...?
原论文是这样说的:
断字示例应用分析
[...] 让我们假设大约有 500,000 个单词要被程序断字,其中 450,000 个单词可以通过应用一些简单的规则来断字。其他 50,000 个单词需要参考字典。可以合理地估计,使用传统的散列编码方法平均需要至少 19 位来表示这 50,000 个单词中的每一个。如果我们假设时间因子 T = 4 是可以接受的,我们从 eq. (9) 散列区域的大小为 2,000,000 位。这对于包含实际核心的哈希区域来说可能太大了。通过使用方法 2,允许的错误频率为 P = 1/16,并通过 T = 2 使用尽可能小的散列区域,我们从等式中看到。 (22) 这个问题可以用小于 300,000 位的散列区域来解决,这个大小很可能适合核心散列区域。如果选择 P 为 1/16,则需要访问磁盘驻留词典,以便在 500,000 个要连字的单词中,大约有 50,000 + 450,000/16 ~ 78,000 个单词,即大约 16% 的情况。与使用完全驻留在磁盘的哈希区域和字典的典型传统方法相比,磁盘访问次数减少了 84%。
【问题讨论】: