当前位置: 首页 > 知识库问答 >
问题:

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

祁驰
2023-03-14

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

给定一组区间[[s1,e1],[s2,e2],[s3,e3],[s4,34],…]如果每个间隔由开始和结束组成,并且所有间隔都是不相交的,则说明点X是否属于其中一个间隔,是否在允许误报但不允许误报的恒定时间内,并使用与输入无关的恒定内存量[此类散列等…]

因此,bloom filter主要可用于点查询,但将每个点存储在bloom filter中的时间间隔中效率不高,使用Trys将产生对数运行时,而且内存使用量应保持不变,且与时间间隔计数无关[超参数]

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

共有1个答案

郗阳德
2023-03-14

我会尝试使用稍微修改过的“Golomb压缩序列”(GCS)(请参阅“缓存、哈希和节省空间的Bloom过滤器”/F Putze,P Sanders,J Singler)。您可以存储开始/停止对,而不是单个条目。

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

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

 类似资料:
  • 我的Java外汇应用程序处理工作时间。我在两个日期字段中有工作开始和结束时间。我成功地计算了两个日期之间的差异时间;但是现在我如何检查结果是在晚上还是白天的范围内???一天从6点开始,到22点结束。例如,有人在凌晨3点到晚上11点之间工作。下面是我如何计算总工作小时数的。 我们有可以工作到晚上10点以上的工人,工资也不一样。如果他们在晚上10点以后工作,他们将获得特殊报酬。我们在工作结束时付款。他

  • 问题内容: 有没有一种方法可以在不执行此冗余代码的情况下测试范围: ? 就像一个函数: 用法: ? PHP是否具有这种内置功能?还是其他方式可以做到? 问题答案: 我认为您不会获得比您的功能更好的方法。 它是干净的,易于遵循和理解的,并返回条件的结果(无混乱)。

  • 有数百万个不重叠的连续间隔,如[a,c]、[c,e]、[e,g)……它们以随机顺序发送给我,我想随时查询是否可以用接收到的这些连续间隔的组合来封闭其他给定间隔。 例如,我希望有一个方法来添加一个连续的间隔,一个方法来测试一个任意的间隔是否可以被之前添加的间隔组合所包围。 类似于 想知道什么是适合这种情况的数据结构? 如果有区别,我们可以假设的边界总是与一些s的边界匹配,因此在上面的示例中,不会有一

  • 问题内容: 嗨,我正在尝试检查当前时间是否在某个时间范围内,例如8:00-16:30。下面的代码显示可以将当前时间作为字符串获取,但是不确定如何使用此值来检查它是否在上面指定的时间范围内。任何帮助将不胜感激! 问题答案: 有很多方法可以做到这一点。就我个人而言,如果可以避免的话,我不喜欢使用字符串。我宁愿处理日期组件。 下面的代码创建的日期为8:00和16:30,然后比较日期以查看当前日期/时间是

  • 有没有办法确定一个数字是否在两个特定数字的范围内,如果这些数字正在变化?例如: 确定 num3 是否介于 num1 和 num2 之间是相当容易的。但是,假设 num1 和 num2 在程序运行期间动态变化: 其他一切都保持不变。现在,与以前相同的算法将不再有效。有没有一种优雅的方法来检查数字是否使用动态变化的最大值和最小值的范围?

  • 假设您有一个间隔列表,例如[(0 4),(1 3),(2 5),(2 6)]。此列表未排序。然后给您一个范围,如[1 5]。您必须返回适合范围内的间隔数。在这个问题中,它将返回2。((1 3)和(2 5)) 间隔列表保持不变,但我们最多得到100000个查询,每个查询由一个范围组成。对于每个范围查询,我们必须返回适合其中的间隔数。 在研究之后,我读到了间隔树。但是,您只能查询与任何给定范围重叠的间