我有一大堆具有开始和结束的地区数千个点。即:
[(3015,3701),(4011,5890),....]
我还有另一组点(开始和结束),我想快速测试一组中的区域是否与另一组中的区域重叠。有没有快速的方法来做到这一点?
谢谢!
- 编辑 -
@Spike Gronim用间隔树回答了我的问题。
谢谢,斯派克!
答案 0 :(得分:0)
def test(lista, listb):
a = 0
b = 0
found = False
while a<len(lista) and b<len(listb):
result = check( lista[a] , listb[b] )
if result < 0:
a += 1
continue
if result > 0:
b += 1
continue
# we found overlapping intervals
found = True
return (found, a, lista[a], b, listb[b] )
return found
def check( (astart, aend) , (bstart, bend) ):
if aend < bstart:
return -1
if bend < astart:
return 1
return 0
lista = [(3015, 3701), (4011, 5890)]
listb = [(1,2), (100,200), (4500,6000)]
result = test(lista, listb)
print result
答案 1 :(得分:-1)
找到两个区域的最小/最大端点,然后查看这些端点是否重叠。