【发布时间】:2016-02-14 08:36:22
【问题描述】:
假设我们有一个算法可以接收假设的长密钥流。然后它为每个键生成一个介于 0 和 1 之间的值,当我们处理它时,用于后验检索。输入集足够大,我们无法为每个键存储一个值。值生成规则在键之间是独立的。
现在,假设我们可以容忍后验查找中的错误,但我们仍希望最小化检索到的和原始值的差异(即在许多随机检索上渐近)。
例如,如果给定键的原始值为 0.008,则检索 0.06 比检索 0.6 好得多。
我们可以使用哪些数据结构或算法来解决这个问题?
布隆过滤器是我能想到的最接近的数据结构。可以量化输出范围,对每个桶使用布隆过滤器,并在检索时以某种方式组合它们的输出以估计最可能的值。在我继续这条道路并重新发明轮子之前,是否有任何已知的数据结构、算法、理论或实践方法来解决这个问题?
理想情况下,我正在寻找一种能够参数化空间和错误率之间权衡的解决方案。
【问题讨论】:
-
我们可以进行范围划分并编写一个哈希函数将每个数字映射到特定范围。范围内的值可以根据误差因素进行控制。
标签: java algorithm data-structures probability bloom-filter