我有一个整数值的排序pytables表,可能包含重复项,以及一个由开始和结束值表示的区域(结束独占)。
我想找到最接近区域开头的值的索引和最接近区域末尾的值的索引。结果索引必须由区域包围。例如:
region = (35, 56)
table_data = [4, 6, 18, 18, 30, 37, 37, 49, 54, 56, 80, 84]
result: (5, 8)
这听起来像是可以通过二分类搜索算法解决的问题,但我还没弄明白该怎么做。
由于这段代码可能在非常大的pytables表上执行了数千次,因此性能很重要。优选地,如果可能的话,应该在同一循环中计算起始和结束索引值。
有人可以帮忙吗?
编辑:
我实际上不使用数组,而是使用pytables表。所以建议使用bisect模块的答案是行不通的。可以通过表[index](通过表的getslice方法)访问行
答案 0 :(得分:4)
简单使用binsearch查找
复杂性为O(lgn)
,因为这是两个完全独立的问题。