获取区域包含的第一个和最后一个值的索引

时间:2014-04-12 11:13:33

标签: python arrays algorithm binary-search pytables

我有一个整数值的排序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方法)访问行

1 个答案:

答案 0 :(得分:4)

简单使用binsearch查找

  • 大于下限的最小值
  • 小于上限的最大值

复杂性为O(lgn),因为这是两个完全独立的问题。