【发布时间】:2013-08-12 03:59:50
【问题描述】:
给你一组间隔S。您必须以最小的时间复杂度找到S 中包含在给定区间(a, b) 中的所有区间。
这可以通过蛮力在O(n) 时间内完成,其中n 是集合S 中的间隔数。但是如果我被允许做一些预处理,这可以在少于O(n) 的时间内完成吗? O(log n)时间?
最初我在考虑interval tree,但我认为它不适用于这里,因为区间树用于获取与给定区间重叠的所有区间。
【问题讨论】:
-
如上所述,您能做的最好的事情是
O(n),因为在最坏的情况下,S的所有元素都必须复制到输出中。 -
是的,这是真的。但我希望像 O(logn) + O(m) 这样的东西,其中 m 是输出中的元素数。
-
@SteveM 请注意,就大 O 表示法而言,
O(logn)+O(m) = O(n),因为 m 可以和 n 一样大。预处理时间也包含在运行时中,因为如果您想对间隔进行排序或使用某些数据结构排列它们,这些也是您算法的一部分。
标签: algorithm search data-structures tree intervals