【问题标题】:Javascript: How to find max N timestamps in time interval from timestamp arrayJavascript:如何从时间戳数组中找到时间间隔内的最大 N 个时间戳
【发布时间】:2016-02-12 05:36:53
【问题描述】:

我需要平移和缩放大量带时间戳的数据。有太多数据无法将其全部绑定到 dom,否则浏览器会陷入困境。时间戳数据按从小到大排序。

因此,我们的想法是在显示的 x 轴上找到适合开始时间点和结束时间点之间的数据,并将其细化到合理的数量 N 以供浏览器处理。

这可以通过将起点和终点之间的间隔分成N个参考时间戳来完成,然后在数据中找到最接近每个参考的时间戳。

我可以对此进行编码,但可能不如现有解决方案高效。

是否有一个库,可能是交叉过滤器,可以做到这一点?

【问题讨论】:

    标签: javascript d3.js crossfilter


    【解决方案1】:

    您有一个有序的数据数组,并且您正在搜索数据中的任意点。您的最佳搜索算法是二进制搜索,它将在 O(log(n)) 时间内找到起点和终点的索引。

    Underscore.js 有一个二分查找的实现:http://underscorejs.org/#indexOf

    不知道交叉过滤器,但检查他们的范围过滤器。

    一旦有了开始和结束索引,您就知道它们之间有多少点。然后你可以决定如何瘦。如何瘦身没有一个正确的答案,这取决于数据和你讲述的故事。您可以每隔 n 个点采样一次,可以平均或最大分区数,或许多其他选项。

    无论您选择如何精简,crossplot 可以通过“分组”(例如,分成等宽分区)然后“减少”组来实现。

    【讨论】:

    • 谢谢,您的回答似乎很合理。我必须编写自己的二进制搜索,因为我不是在寻找精确匹配,而是最接近时间戳。
    • 在这种情况下,请查看 sortedIndex。它告诉你你的值将被插入的索引(使用二进制搜索)。
    • 谢谢,我确实尝试过 sortedIndex。它比我的版本快两倍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 2013-09-30
    相关资源
    最近更新 更多