二进制搜索最近的索引/索引'到O的值(log n)

时间:2015-08-03 15:17:32

标签: javascript algorithm binary-search

我已经将具有dateTime的对象(可以存在重复)以毫秒为单位作为对象的成员进行排序,我希望获得与currentTime具有最小dateTime差异的数组的索引/索引。我想过使用二进制搜索,但它需要键存在于数组中。我可以使用简单的for循环,但是O(n)是否有一个有效的二进制搜索变体来获得具有O(log n)效率的索引/索引?。

1 个答案:

答案 0 :(得分:0)

  

我想得到与currentTime具有最小dateTime差异的数组的索引/索引

因此,您希望找到小于或等于currentTime最大值和大于或等于currentTime 最小值。你的答案必须是其中之一。

对于第一个,您可以像这样编写二进制搜索:

while left < right:
  m = left + (right - left) / 2
  if array[m] <= target: # using <= here to save the right index 
                         # in store in case the key exists
    left = m + 1
    store = m
  else:
    right = m

此次运行后,store将包含低于或等于target的最后一个索引。然后你可以检查:

if array[store] == target:
  you found the target exactly
else:
  check array[store] and array[store + 1] (if not out of bounds) and pick the best.