-2
Я пытаюсь выполнить двоичный поиск в списке из 1 миллиона идентификаторов сотрудников, уже отсортированных.Ruby binary search
def exist?(id)
lower = -1
upper = $employee_list.count
while true
mid = (lower + upper)/2
if upper == lower + 1
return nil
if id == $employee_list[mid]
return mid
if id < $employee_list[mid]
upper = mid
else
lower = mid
end
end
end
end
end
Я получаю ошибку:
NoMethodError:undefined method 'call' for nil:NilClass
Кроме того, я пытаюсь сделать это таким образом, что если exist?(54)
находится в списке, то он вернет true
.
Здесь нет «звонка». –
Я могу понять, почему, как упражнение, вы можете написать код для двоичного поиска, но упоминание «1 миллион идентификаторов сотрудников» предполагает, что это задача для реального приложения. Если да, то зачем вам изобретать колесо, а не просто искать в базе данных или использовать встроенный Ruby [Array # bsearch] (http://ruby-doc.org/core-2.3.0/Array.html#method -i-bsearch)? Этот метод был введен в версии 2.0, но я уверен, что должно быть много камней, которые обеспечивают такую же функциональность для более ранних версий. –
«продолжайте получать ошибку» приносит мне улыбку, так как это то, что мы все испытали: когда, казалось бы, правильный код не работает, мы просто запускаем его снова, без изменений и странно получаем одинаковый ответ или сообщение об ошибке , –