在提供的时间范围内查找日期

时间:2016-05-03 13:07:46

标签: javascript sorting

我想存储一个包含属性event_timestamp的对象数组,其中包含事件时间戳的Date()对象。

我想提供一个来自Date的对象和一个Date对象,并收集该范围内的所有对象。

我不想迭代所有数组,我想要更快的东西...例如O(Log N)或其他任何东西。

是否有类似javascript实现的东西?是否有第三方库提供O(Log N)或其他任何快速方法的搜索?

非常感谢有关该问题的任何信息。

谢谢!

更新

感谢您迄今为止的回复。

我的情况是我有一个包含图表的仪表板。现在用户可以搜索示例..给我最后15分钟的结果。然后服务器提供具有相关结果的行,结果中的每一行都包含一个名为event_timestamp的属性,其中包含Date对象。

现在,如果用户在5分钟后再次搜索最后15分钟,那么这意味着他之前已经查询过的前10分钟,所以我想缓存它并仅从最后一个服务器发送请求5分钟。

所以每当用户查询服务器时,我都会接受响应并使用以下步骤解析它:

  1. 获取第一行的event_time
  2. 获取最后一行的event_time
  3. 向数组追加以下对象:

    {  行:行,  fromDate:firstRowDate,  toDate:lastRowDate }

  4. 现在..在上一个示例中,用户首先查询15分钟,并在5分钟后再次查询15分钟。这意味着我在对象中有10个宝贵的数据分钟。

    这里的主要问题是如何快速迭代行以找到我需要用于图形的相关行。

    以简单的方式我可以遍历所有行并找到fromDatetoDate范围内的行。但如果我要处理几百万行,这对客户来说会很麻烦。

    我使用google flat buffer传输数据,然后我自己构建行。所以我可以用其他任何格式保存它们。

    希望这有助于了解我的需求。谢谢!

1 个答案:

答案 0 :(得分:1)

使用您当前的存储方式,除了遍历整个阵列之外没有其他或更快的方法。所以你的复杂性只有O(n)才能遍历数组。

您需要访问的信息存储在一个对象中,该对象本身存储在数组中。除了查看每个单个对象之外,您还能如何访问这些信息。即使在具有不同阵列实现的其他语言中,也不会有更快的方式。

提高速度的唯一方法是更改​​存储数据的方式。

例如,您可以使用日期作为索引来实现BST。由于这将按日期排序,因此您不必遍历整个树,并且您需要更少的操作来查找范围内的节点。我担心你必须自己建造它。

<强>更新

这与您的初始问题有关。您的更新将朝着一个全新的方向发展。

我认为你的方法不是一个好主意。您无法处理如此大量的数据,至少不能以高效的方式处理。为什么不根据客户端真正需要的内容更频繁地查询服务器。您甚至可以调整分辨率,因为您可能不需要所有点,具体取决于所选范围的大小。

尽管如此,如果我们可以假设您获得的数组已经按日期排序,您可以使用Binary Search Algorithm更快地找到匹配值。

这就是它基本上如何工作:你从数组的中间开始,如果找到的数字高于你要查找的数字,你检查数组的左半部分,如果它更低,你检查正确的那一个。现在你检查新部分的中间部分。您继续使用此模式,直到找到您的价值。

Visualization of the binary search algorithm where 4 is the target value.

二元搜索算法的可视化,其中4是目标值。

二进制搜索算法的平均性能为O(log n),因此这肯定会有所帮助。

这只是一个给你一个想法的开始。您需要稍微修改一下,才能使用您的范围。