Перейти к содержанию

Лабораторная работа №2: "Угадай число"

Цель работы

Реализация алгоритма бинарного поиска и оценка его эффективности при работе с упорядоченными числовыми последовательностями.

Задание

Создать программу, выполняющую поиск числа в диапазоне методом деления отрезка пополам. Результатом работы должен быть индекс найденного элемента и количество попыток, затраченных на поиск.

Реализация

def guess_number_bin(start, end, target) -> (int|None, int):
    numbers = [i for i in range(start, end + 1)]
    attempts = 0
    l = 0
    r = len(numbers) - 1

    while l <= r:
        attempts += 1
        middle_ind = (l + r) // 2
        middle = numbers[middle_ind]

        if middle == target:
            return middle_ind, attempts
        elif middle < target:
            l = middle_ind + 1
        else:
            r = middle_ind - 1
    return None, attempts

Вывод

Был реализован алгоритм бинарного поиска, который продемонстрировал высокую скорость работы на больших данных. Тестирование показало, что для диапазона в миллион значений программе требуется не более 20 итераций. Это подтверждает теоретическую эффективность алгоритма со сложностью O(\log n), что значительно превосходит линейный поиск.