【问题标题】:Probabilistic data structure for checking if item within range of intervals用于检查项目是否在区间范围内的概率数据结构
【发布时间】:2020-09-22 11:37:21
【问题描述】:

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

给定一组区间 [[s1,e1],[s2,e2],[s3,e3],[s4,34],...] 其中每个区间由 start 和 end 组成,所有区间都是不相交,判断点 X 是否属于允许误报但不允许误报的恒定时间间隔之一,并使用与输入无关的恒定内存量[例如散列等]

所以主要bloom filter可以用于点查询,但是将每个点存储在bloom filter的间隔中效率不高,并且使用Tries会产生对数运行时,内存使用量应该是恒定的并且不相关间隔计数[超参数]

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

【问题讨论】:

  • 允许使用多少预处理时间?只是为了确认一下,您已经预先获得了所有的间隔?
  • 嘿,最初给出了间隔,但它们可以通过添加/删除进行更新,因此更新时间应该是最小的,因此允许将初始状态构建到 o(n^2),但对于update(insert, delete) 它应该在 log(n) 附近,其中 n 是间隔数,当然,如果有更好的界限,那就太好了

标签: data-structures hash probability intervals bloom-filter


【解决方案1】:

我会尝试使用稍加修改的"Golomb-compressed sequence" (GCS)(请参阅“缓存、哈希和空间高效的布隆过滤器”/F Putze、P Sanders、J Singler)。您可以存储开始/停止对,而不是单个条目。

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

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

【讨论】:

    猜你喜欢
    • 2016-05-03
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多