【问题标题】:Algorithms for range query on streams of integers整数流范围查询的算法
【发布时间】:2018-06-19 01:06:56
【问题描述】:

我的程序得到了一个正整数流。我必须在收到它们时存储它们,并且能够回答介于两者之间的范围查询。

我想到的一个简单解决方案是将整数存储在哈希表中,其中键是整数的字符表示(键必须是我的哈希表中的字符串)。 然后,每当范围查询 [a, b] 出现时,我可以简单地从 a 循环到 b,检查键是否存在,如果存在则检索值。但是,我不确定这是否是一个好方法。

对于这个问题还有哪些其他替代解决方案?

【问题讨论】:

  • 我确信这不是一个好方法。
  • @ScottHunter 是的,但与什么相比?
  • @SpiderRico 我们是否知道整数流的限制条件,比如流中将出现的最大整数值是多少?
  • @zenwraight 不,我们不知道最大值/最小值。但是,我们知道它们是积极的。我会更新问题以说明这一事实。

标签: algorithm range-query


【解决方案1】:

如果您维护了到目前为止读取的流中的整数的有序列表,则可以通过查找 a(使用二分搜索)并从该点迭代直到您通过 b 来完成范围查询,这样查询所花费的时间将与结果的实际大小成正比,无论填充的范围有多稀疏。

【讨论】:

  • 这是一个有效的替代方案,我会尝试它,但我们可以说这绝对比我的天真的解决方案更好吗?这个有插入时间,对吧?
  • 你需要一个相当做作或琐碎大小的问题才能更好地解决这个问题。
  • @SpiderRico 使用像 AVL 树这样的平衡搜索树,插入时间为 log(n) 怎么样?
猜你喜欢
  • 2014-11-02
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多