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

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

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

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 ?
  • Вопрос задан
  • 2195 просмотров
Подписаться 2 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Python-разработчик
    10 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
ScriptKiddo
@ScriptKiddo
В первой итерации
low = 0
high  = 4


0+4 = 4
Индексы в Python начинаются с нуля, поэтому элемент с индексом 4 - пятый по счету элемент в массиве [1, 3, 5, 7, 9]
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
zagayevskiy
@zagayevskiy
Android developer at Yandex
Потому что mid = (low + high)
Нужно ещё на два разделить.
Ответ написан
Комментировать
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Сначала нужно язык выучить, а уж потом за алгоритмы браться.
Ответ написан
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
Ответ написан
Комментировать
samodum
@samodum
Какой вопрос - такой и ответ
ты же понимаешь, что там цикл? И каждую итерацию guess будет разным
Ответ написан
@Anisa_01
# бинарный поиск
def binary_search(lst, item):
low = 0
high = len(lst)-1

while low <= high:
mid = (low + high) // 2
guess = lst[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid + 1
return None
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]

print(binary_search(my_list, 22))
print(binary_search(my_list, -1))
Рекомендую не писать тип list в названии переменных и для python3- mid = (low + high) // 2- принципиально деление без остатка
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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