如何解决检查一个区域是否与另一个1-d区域重叠的快速方法
|| 我有很多地区,从起点到终点都有数千个点。即: [(3015,3701),(4011,5890),....] 我还有另一组点(开始和结束),在这些点上,我需要一种快速的方法来测试该组中的区域是否与另一组中的区域重叠。有快速的方法吗? 谢谢! - 编辑 - @Spike Gronim用间隔树回答了我的问题。 谢谢,斯派克! http://en.wikipedia.org/wiki/Interval_tree解决方法
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
,找到两个区域的最小/最大端点,然后查看它们是否重叠。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。