给定一组间隔S.您必须在最小时间复杂度中找到S中包含在给定间隔(a,b)中的所有间隔

时间:2013-08-10 08:00:33

标签: algorithm search data-structures tree intervals

您将获得一组间隔S。您必须找到S中包含在给定时间间隔(a, b)内的所有时间间隔最短的时间间隔。

这可以在O(n)时间通过蛮力完成,其中n是集合S中的间隔数。但是,如果我被允许进行一些预处理,可以在不到O(n)的时间内完成,例如O(log n)时间?

最初我在考虑interval tree,但我不认为它适用于此处,因为间隔树用于获取与给定间隔重叠的所有间隔。

2 个答案:

答案 0 :(得分:5)

您可以在2D平面中重塑问题。让每个区间的(begin, end)为二维点。 (请注意,所有有效间隔都将在对角线上方结束)

您的Interval-search-problem转换为经过充分研究的正交2D范围查询,其算法具有O(sqrt(n)+k)O(log^2+n +k)运行时间,其中k是报告的点数

range query

答案 1 :(得分:1)

Persistent binary search tree可以在这里使用。

<强>预处理:

  1. 创建空的持久树。它应该存储按结束点排序的间隔。
  2. 按起点对间隔进行排序。
  3. 对于每个间隔,从排序列表的末尾开始,创建持久树的“副本”并将此间隔添加到此副本。
  4. 搜索:

    1. 在排序列表中查找查询间隔的起点。
    2. 将持久树的相应“副本”从最小的密钥迭代到查询间隔的末尾。
    3. 搜索时间复杂度为O(log(n)+ m),其中m是输出中元素的数量。