【发布时间】:2014-03-08 20:17:42
【问题描述】:
给定一行区域的列表:
regions = [(10,25), (18, 30), (45, 60), ...] # so on so forth, regions can be overlapping, of variable size, etc.
我想知道点 X 属于哪些区域:
x = 23
find_regions(regions, x) # ==> [(10, 25), (18, 30)]
我天真地知道(以及我当前的实现)我们可以只在 O(n) 中进行搜索,但是具有数千个区域(还有数千个查找点,真的是动机)的一个更具戏剧性的用例 em>) 证明研究比这更快的方法是合理的:
regions = [(start, end) for (start, end) in regions if start < x and x < end]
我会冒险猜测有人已经解决了这个问题......但我不确定如何最好地完成它。想法?
【问题讨论】:
-
为什么
find_regions(regions, x)会返回[(10, 20), (22, 30)]? -
忘记将该样本更新为原始定义 (18, 30)
-
我还是不明白。在什么意义上
23“属于”区域(10, 20)? -
原来我把这两个都搞砸了
-
您是否需要在输入介于最小值和最大值之间的可能区域列表中查找所有区域?这将在一定程度上增加计算负担——如果下限符合条件,没有算法可以在不检查其上限的情况下排除范围,反之亦然。我自己无法回答这个问题,只是说如果你有单调递增的下限,你至少可以从二分搜索算法中受益,以找到可能符合条件的范围。但是当多个范围覆盖输入时,任何算法都需要定义正确的行为。
标签: python algorithm search data-structures