验证数量范围数组的最有效方法是什么?

时间:2014-05-12 16:10:30

标签: arrays validation loops numbers range

我们说我有一系列数量范围:

[{min=1, max=500}, {min=2, max=1000}, ...]

验证范围不重叠的最有效方法是什么(上述方法将无法验证)?

1 个答案:

答案 0 :(得分:2)

一种显而易见的方法是使用间隔树并逐个插入项目。那么检查将是微不足道的。

另一种方法会更直接。您可以按字典顺序对数组进行排序,并保持最左侧的可用起点。当一个新的时间间隔到来时,它必须在这一点之后开始(我们不介意这些差距,因为数组已经排序,而且差距永远不会再被访问)。

def validate(listoftuples):
    rightedge = -10000000000000000 # some kind of minus infinity
    listoftuples.sort()
    valid = True
    for l, r in listoftuples:
        if l >= rightedge:
            rightedge = r
        else:
            valid=False
            break
    return valid

validate([(1, 500), (2, 1000)]
>>> False
validate([(1, 2), (2, 1000)])
>>> True

这两个都在O(N log N)时间内运行。我不确定能否做得更好。