微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查一个区域是否与另一个1-d区域重叠的快速方法

如何解决检查一个区域是否与另一个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 举报,一经查实,本站将立刻删除。