用于检查项目是否在间隔范围内的概率数据结构



>我正在尝试解决以下问题:

给定一组区间 [[s1,e1],[s2,e2],[s3,e3],[s4,34],...],其中每个区间由开始和结束组成,并且所有区间都是不相交的,判断点 X 是否属于允许误报但没有误报的恒定时间,并且使用独立于输入的恒定内存量 [此类哈希等]。

所以主要是布隆过滤器可以用于点查询,但是将每个点存储在布隆过滤器的间隔中效率不高,并且使用 Try 会产生对数运行时,内存使用量应该是恒定的,与间隔计数无关 [hyper 参数]

我试图通过调整现有DS来寻找现有的DSor,但无法找到类似的DS,所以如果有的话,有什么建议可以解决这个问题吗?

我会尝试使用稍微修改的"Golomb压缩序列"(GCS((参见"Cache-,Hash-and Space-Efficient Bloom Filters"/F Putze,P Sanders,J Singler(。您可以存储开始/停止对,而不是单个条目。

您需要将GCS分成块。每个块包含一定的范围。由于开始/停止对可能不在同一块中,因此对于每个块,您需要存储一个额外的位,以便您知道第一个条目是开始或停止块。每个区块都需要单独维护和更新。拥有较小的块意味着更快的更新,但也需要更多的空间,因为每个块都有开销。也许您想将每个块维护为一个单独的数组,然后您需要一个指向所有块的指针数组。

静态 GCS 的示例实现在这里。但是,它不包含开始/停止对。

最新更新