【发布时间】:2017-01-23 07:14:56
【问题描述】:
我刚刚学会了如何进行插值搜索,但是在 Ruby 上实现它时遇到了问题。我一直有无限循环,下限或上限接近搜索到的数字,但下限不触及方法退出条件的上限。
def exist?(id)
lower = 0
upper = $employee_list.length - 1
while lower <= upper
rise = upper - lower
run = $employee_list[upper] - $employee_list[lower]
x = id - $employee_list[lower]
middle = (rise.to_f / run.to_f * x.to_f + lower.to_f).floor
if id == $employee_list[middle]
return true
elsif id < $employee_list[middle]
upper = middle - 1
else
lower = middle + 1
end
end
end
【问题讨论】:
-
$employee_list排序了吗? -
是的!而且您的代码有效!
标签: ruby binary-search linear-interpolation