Я изучал несколько алгоритмов поиска, и моя последняя проблема сводится к бинарному поиску.Я посмотрел несколько видео на YouTube, чтобы понять концепцию, а затем попытался решить проблему, но продолжал получать ошибку бесконечного цикла.Я просмотрел переполнение стека и reddit, и куда бы меня ни привел Google, но я не могу найти решение, которое бы соответствовало моему методу кодирования.Кроме того, прошу прощения за термин «исправление обезьяны». Мне стало известно, что технический термин называется «расширение», так что вина моих инструкторов заключается в том, что он преподает нам его как «исправление обезьяны».
Вот мой код:
class Array
def my_bsearch(target)
return nil if self.empty?
middle_idx = self.length/2
left = self.take(middle_idx)
right = self.drop(middle_idx + 1)
return middle_idx if self[middle_idx] == target
until self[middle_idx] == target || self.nil? == nil
if self[middle_idx] < target
right.my_bsearch(target)
elsif self[middle_idx] > target
left.my_bsearch(target)
end
end
end
end
У меня есть решение, но я не хочу просто запомнить его - и у меня возникают проблемы с его пониманием;поскольку я пытаюсь перевести это, учиться на нем и внедрить то, что мне не хватает, в свой собственный код.
class Array
def my_bsearch(target)
return nil if size == 0
mid = size/2
case self[mid] <=> target
when 0
return mid
when 1
return self.take(mid).my_bsearch(target)
else
search_res = self.drop(mid+1).my_bsearch(target)
search_res.nil? ? nil : mid + 1 + search_res
end
end
end
Я думаю, я понимаю случай /, несмотря на то, что я не пользуюсь им.Я пытался следить за этим с помощью отладчика, но я думаю, что зациклен на том, что происходит в разделе ELSE.Синтаксический сахар, хотя и делает это, очевидно, более кратким, чем моя логика, не является прямым / чистым для кого-либо из моего уровня грамотности в рубине.Так что да, мое невежество - большая часть проблемы, я думаю.
Есть ли кто-то немного более грамотный и терпеливый, способный помочь мне разбить это на что-то, что я могу понять немного лучше, чтобы я мог извлечь из этого уроки?