algorithm - 搜索是按时间线顺序排列的吗?

标签 algorithm search time-series binary-search-tree

我们有一个格式为 - {val, timestamp} 的输入流。时间戳严格增加。值是整数(32 位)。我们只对最后 n 个时间戳事件感兴趣。例如。如果 n 为 100 并且调用 add(400, 12),我们只对时间序列 [300, 400] 感兴趣。我们还希望能够搜索最近 n 个时间戳事件。

对于搜索,如果没有具有特定时间戳的值,我们希望返回前一个时间戳的值(假设前一个时间戳在 [latestTimestamp-n,latestTimestamp] 范围内)。

解决这个问题的一种方法是使用二叉搜索树(C++中的map)。添加时,我们会将元素添加到 BST 中。因此,add 的复杂度为 O(log n)。对于搜索,我们只需进行 lower_bound(在 C++ 中)搜索并检查时间戳是否落在有效范围内([latestTimestamp-n,latestTimestamp])。搜索的复杂度也为 O(log n)。

我想知道是否有一种算法具有更好的时间复杂度,即使以增加空间复杂度为代价?我对提高搜索(时间戳)操作的时间复杂度更感兴趣。

最佳答案

由于您添加的每个时间戳都位于前面的所有时间戳之后,而您删除的时间戳始终是最前面的,因此您只需要一个支持快速搜索的队列即可。

如果您使用动态数组支持的队列(如 Java 中的 ArrayDeque),则可以在摊销常数时间内完成在末尾添加一个新条目,并从开头删除任何过时的条目。搜索将是一个简单的二分搜索,并且需要 O(log N)。

关于algorithm - 搜索是按时间线顺序排列的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53890132/

相关文章:

R Holt Winters 分解错误 'no or less than 2 periods'

c - 如何在姓名前添加验证 mr 或 mrs

PHP排名算法

algorithm - 这个有向图的接合点是什么?

mysql - 如何对 MySQL 表进行数据出现搜索

python - 展平 pandas df 的时间序列数据

python - Python 中的时间序列可达微秒

algorithm - 使用列表哈希,我如何以随机顺序对每个键/列表元素进行一次操作?

algorithm - 为 A* 搜索找到好的启发式

android - 带有搜索输入法选项的 AutoCompleteTextView