我有以下数据结构,它描述了一个对象及其有效的时间段。假设下面的数字是 unix 时间戳。
{
"id": 1234,
"valid_from": 2000
"valid_to": 4000
},
{
"id": 1235,
"valid_from": 1000,
"valid_to": 2200,
}
...
我希望能够快速将这些项目存储在 JavaScript 中,然后查询在特定时间有效的项目。
例如,如果我要查询在 2100 有效的对象,我会得到 [1234, 1235]。如果我要查询在 3999 有效的对象,我会得到 [1234],而在 4999 什么也没有。
我将在结构中拥有大约 50-100k 个项目,我想要快速的查找速度,但插入和删除可能会更慢。
项目将具有重复的 valid_from 和 valid_to 值,因此它需要支持重复项。项目将重叠。
我将需要不断地将数据插入到结构中(可能是批量加载以进行初始加载,然后随着数据的变化进行一次更新)。我还将定期修改记录,因此很可能是删除和插入。
我不确定以高效方式解决此问题的最佳方法是什么?
算法不是我的强项,但如果我知道正确的方法,我可以自己研究算法。
我的想法:
我最初在考虑使用修改后的二叉搜索树来支持重复键和最接近查找,但这仅允许我查询 > valid_from 或 < valid_to 的对象。
这将涉及我将数组或树一分为二以查找所有项目> valid_from,然后手动检查每个项目的valid_to。
我想我可以有两棵搜索树,一棵用于 valid_to 和 valid_from,然后我可以检查结果重叠中的哪个 id 并返回那些 id?
这对我来说仍然有点hacky?有人可以推荐更好的方法还是这样做的。