【问题标题】:Time range hash function时间范围哈希函数
【发布时间】:2017-12-02 16:08:30
【问题描述】:

给定以下数据结构:

[{
  start: 10.2,
  end: 15.3,
  text: 'Lorem Ipsum....'
}, {
  start: 16.3,
  end: 20.5,
  text: 'dolor sit...'
}, {
  start: 19.4,
  end: 25.1,
  text: 'consectetur adipiscing elit'
}]

我需要找出给定时间的活动文本(例如18,它匹配元素 2 和 3)。我已经实现了一个 find 方法来检查给定时间是否大于 start 并且小于 end。不幸的是,这对于大约 25k 个条目来说效率不高。因此,我正在寻找一个 hashmap 实现,它计算 start 和 end 作为键并在给定时间返回匹配条目。

【问题讨论】:

  • 你试过谓词方法吗
  • 数据排序了吗?如果是这样,您是否尝试过二进制搜索?
  • @NinaScholz 是的,数据可以在应用程序初始化时按开始或结束排序。将看看二进制搜索。
  • @KalaiselvanA 还没有,可能是一个性能更高的实现,但我想避免遍历整个数组。
  • @Slai 我目前正在尝试间隔树。结果似乎很有希望。

标签: javascript arrays


【解决方案1】:

这将有助于您过滤数据

var arr=[{
  start: 10.2,
  end: 15.3,
  text: 'Lorem Ipsum....'
}, {
  start: 16.3,
  end: 20.5,
  text: 'dolor sit...'
}, {
  start: 19.4,
  end: 25.1,
  text: 'consectetur adipiscing elit'
}]

var condition=(arr)=>(arr.start>=18);

var arr_1=arr.filter(condition);
console.log(arr_1);

【讨论】:

    【解决方案2】:

    对于已排序的数据,您可以采用binary seach,其中开始位于列表的中间,如果想要的日期较小,则取开始和中间的中间值或另一侧的中间值。继续直到找到该项目。


    对于未排序的数据,您可以将年份作为哈希键的一部分,并将列表中每个事件的周数作为。

    如果一个事件在另一周结束,则在哈希表中添加该事件的所有引用以及它发生的所有周。

    对于搜索,只需计算周数并根据给定的周数据进行精细搜索。

    您可以取更短的范围,而不是一周,例如一天或更大的范围,例如上半月或下半月(这比一周更容易计算)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2012-04-15
      • 1970-01-01
      • 2017-04-09
      • 2014-05-08
      • 2019-09-10
      • 2021-08-03
      相关资源
      最近更新 更多