Задать вопрос

Как работает код из книги «Грокаем алгоритмы»?

Здравствуйте!
Начал читать книгу "Грокаем алгоритмы" и в первом же примере не могу понять, как работает одна из строчек.
Сам код:

def binary_search(list, item):
    low = 0
    high = len(list)-1

    while low <= high:
        mid = (low + high)
        guess = list[mid]
        if guess == item:
            return mid
        if guess > item:
            high = mid - 1
        else:
            low = mid + 1
    return None


my_list = [1, 3, 5, 7, 9]

print(binary_search(my_list, 3))
print(binary_search(my_list, -1))


Не могу понять, почему в этой строчке:

guess = list[mid]

guess = 9 ?
  • Вопрос задан
  • 2090 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
ScriptKiddo
@ScriptKiddo
В первой итерации
low = 0
high  = 4


0+4 = 4
Индексы в Python начинаются с нуля, поэтому элемент с индексом 4 - пятый по счету элемент в массиве [1, 3, 5, 7, 9]
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
zagayevskiy
@zagayevskiy
Android developer at Yandex
Потому что mid = (low + high)
Нужно ещё на два разделить.
Ответ написан
Комментировать
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Сначала нужно язык выучить, а уж потом за алгоритмы браться.
Ответ написан
samodum
@samodum
Какой вопрос - такой и ответ
ты же понимаешь, что там цикл? И каждую итерацию guess будет разным
Ответ написан
pavloops
@pavloops
я не волшебник, я только учусь
def binary_search ( list, item) :
    # в low и high хранятся границы части списка, где выполняется поиск
    low = 0
    high = len(list)-1
    i = 0
  # Пока не останется один элемент
    while low <= high:
        # Проверяем средний элемент
        mid = (low + high)//2
        guess = list[mid]
        # Значение найдено
        if guess == item:
            return mid
        # Значение велико
        if guess > item:
            high = mid - 1
        # Значение мало
        else:
            low = mid + 1
    # Значение не найдено
    return None
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы