【发布时间】:2022-11-05 18:59:17
【问题描述】:
假设我有两个范围 (x1,x2) 和 (z1,z2)。检查它们是否相交的最快方法是什么?
if
#case: (2,4), (3,6)
x1 > z1 < x2 and (z2 < x1 or z2 > x2)
or
#case: (2,4) , (1,3)
x1 > z2 < x2 and (z1 < x1 or z1 > x2)
or
#case: (3,6), (2,4)
............. reverse(1) x <--> z
or
#case: (1,3), (2,4)
............. reverse(2) x <--> z
顺便说一句,在另一个范围内包含一个范围是可以的,例如
(2,5) , (3,4)
(2,5) , (3,5)
(2,5) , (2,4)
(这使问题不再重复。此外,条件是 <,> 而不是 >=,<=。还有一个我希望输入范围也是无序的,例如 (x2,x1),(z2,z1) ; (z1,z2),(x1,x2) )
但是,例如,这不算作交集:
(2,5), (2,5)
什么是更少检查的更快方法?
到目前为止,我有:
def olap(x1,x2,z1,z2):
if x1 > x2 : x1,x2 = x2,x1
if z1 > z2 : z1,z2 = z2,z1
if x1 > z1 : z1,z2,x1,x2 = x1,x2,z1,z2
return x1 < z2 and z1 < x2 < z2
【问题讨论】:
-
在我看来 - 使用 python 范围和集合操作。 Fox 示例: r1 = set(range(x1,x2)) r2 = set(range(z1,z2)) # 使用集合交集运算符...
-
更大的范围会很慢
-
@DanielAgam IMO,这是一个糟糕的建议。它将以极其繁琐的方式解决一个简单的数学问题。
-
@DanielHao 必须阅读讨论...谢谢
标签: python range intersection