我正在尝试理解我的配对合作伙伴写的这段代码。我不明白为什么她使用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
答案 0 :(得分:3)
finish - start
是要搜索的窗口的长度(+ 1,以便于算术);它从整个数组开始,并在每次迭代时减半,方法是将开始或结束设置为中位数。
当它达到1时,没有任何东西可以搜索,并且找不到输入对象。
答案 1 :(得分:1)
想想孩子们如何玩“猜1到100之间的数字”游戏。 “它大于50吗?” “没有。”你现在知道它是1到50之间的数字。“它大于25吗?” “是。”你现在知道它在26到50之间。等等......
二进制搜索也一样。您检查目标是否高于或低于中档。无论答案结果如何,您已经消除了一半的可能性,并且可以专注于剩余的子集。每次重复此过程时,都会将仍在考虑中的范围缩小一半。当范围下降到第一个大小时,您已找到目标值或确定它不在集合中。