您将获得一组间隔S
。您必须找到S
中包含在给定时间间隔(a, b)
内的所有时间间隔最短的时间间隔。
这可以在O(n)
时间通过蛮力完成,其中n
是集合S
中的间隔数。但是,如果我被允许进行一些预处理,可以在不到O(n)
的时间内完成,例如O(log n)
时间?
最初我在考虑interval tree,但我不认为它适用于此处,因为间隔树用于获取与给定间隔重叠的所有间隔。
答案 0 :(得分:5)
您可以在2D平面中重塑问题。让每个区间的(begin, end)
为二维点。 (请注意,所有有效间隔都将在对角线上方结束)
您的Interval-search-problem转换为经过充分研究的正交2D范围查询,其算法具有或运行时间,其中k是报告的点数
答案 1 :(得分:1)
Persistent binary search tree可以在这里使用。
<强>预处理:强>
搜索:强>
搜索时间复杂度为O(log(n)+ m),其中m是输出中元素的数量。