试图理解二进制搜索

时间:2014-06-04 04:21:14

标签: ruby binary-search

我正在尝试理解我的配对合作伙伴写的这段代码。我不明白为什么她使用until循环说明循环直到(完成 - 开始)== 1.她到底是什么循环直到?

def binary_search(object, array)
  array.sort!
  start = -1
  finish = array.length

  until (finish - start) == 1 do
    median =  start + ((finish - start) / 2)
    # p start
    # p finish
    return median if object == array[median]
  if object > array[median]
    start = median
  elsif object < array[median]
    finish = median
  end
 end
 -1
end

2 个答案:

答案 0 :(得分:3)

finish - start是要搜索的窗口的长度(+ 1,以便于算术);它从整个数组开始,并在每次迭代时减半,方法是将开始或结束设置为中位数。

当它达到1时,没有任何东西可以搜索,并且找不到输入对象。

答案 1 :(得分:1)

想想孩子们如何玩“猜1到100之间的数字”游戏。 “它大于50吗?” “没有。”你现在知道它是1到50之间的数字。“它大于25吗?” “是。”你现在知道它在26到50之间。等等......

二进制搜索也一样。您检查目标是否高于或低于中档。无论答案结果如何,您已经消除了一半的可能性,并且可以专注于剩余的子集。每次重复此过程时,都会将仍在考虑中的范围缩小一半。当范围下降到第一个大小时,您已找到目标值或确定它不在集合中。