我想表示未来系统元素的预测状态。元素可以处于状态S1
或S2
。 S1预测是<t_start, t_end>
形式的非重叠区间,其中t_
s是未来的相对时间。缺少S1
间隔意味着状态为S2
且仅进行S1
次预测。主要操作是添加预测间隔并查询任意未来时间的状态。状态查询比查询更频繁地发生几个数量级。可以在有限范围内的任何时间添加间隔,相对于现有间隔的任何顺序。另一个重要的操作是时间的进展,这意味着预测越来越接近并最终传递到可以被遗忘的过去。预测可能很少被删除,但这不是必需的。时间的基础模型可以是连续的,也可以是离散化为整数的时间步长。
我已经使用链表实现了这一点,其中列表中的位置表示时间(使用时间离散为整数),节点内容为S1
或S2
。这非常适合随着时间的推移进行更新(您只需删除第一个节点),并且查询速度相当快(未来时间步数的线性)。但是,因为您列举了所有可能的时间片,所以在添加预测方面有点难看,并且随着时间范围的增加或时间片的精确度,它会严重缩放。因此,我正在寻找一种替代方法(例如,基于间隔某种方式)。
答案 0 :(得分:1)
一种可能性是将间隔存储在二叉搜索树中。如果你可以忍受线性时间最坏情况的行为,我会建议splay tree,因为它会调整自己以处理在摊销的常数时间内有利的查询模式。
由于间隔不重叠,因此搜索BST非常简单。如果查询点包含在当前间隔中,那么我们就完成了。如果它位于左侧,则搜索左子树。如果它位于右侧,请搜索正确的子树。