我正在寻找平均案例性能为 O(log(N)) 的算法,以从排序列表中提取介于(或等于)最小值和最大值之间的元素。
问题在于,由于最小值和最大值实际上可能不在列表中,或者甚至可能重复,因此二进制搜索不会执行。三元搜索似乎更接近我所寻求的,但到目前为止,我还无法创建一个函数来执行我所看到的基于三元搜索的功能。
例如,输入:
list=[1,2,3,4,5,6,7], min=3, max=6
应该返回 [3,4,5,6]。同样地,
list=[500,757,2412,10000,123123], min = 600, max = 5000
应该返回 [757,2412]。
这也可以在 python 中使用以下方式完成,效率较低:
def withinRange(values,min,max):
return [val for val in sorted(values) if val <= max and val >= min]
该操作被调用得足够多,因此非常喜欢 O(log(N)),并且排序只会进行一次。