Мы всегда на связи

Пишите в любое удобное время:
whatsappvktelegramMAX
Или задайте вопрос через форму:

Учебник по информатике и математике

Структурированные пути обучения: от первых программ до олимпиад и вступительных в топ-школы.
Заниматься с наставником

Темы

Похожие темы

прочитали
3 задачи

Бинарный поиск

Оглавление:

Представь, что тебе нужно найти слово в толковом словаре. Ты открываешь книгу посередине и смотришь: твоё слово стоит левее или правее? Дальше повторяешь то же самое с оставшейся половиной. Это и есть бинарный поиск.

Алгоритм работает только с отсортированным массивом — это ключевое условие. Каждый шаг вдвое уменьшает зону поиска, поэтому для массива из миллиона элементов потребуется не более 20 сравнений.

Идея алгоритма

Ключевая идея: на каждой итерации мы смотрим на средний элемент и выбрасываем половину, которая не может содержать ответ.

Алгоритм работает только с отсортированным массивом — это ключевое условие. Каждый шаг вдвое уменьшает зону поиска, поэтому для массива из миллиона элементов потребуется не более 20 сравнений.

Ключевая идея: на каждой итерации мы смотрим на средний элемент и выбрасываем половину, которая не может содержать ответ.

Алгоритм шаг за шагом

C++


#include <iostream>

int main() {
    int firstNumber;
    int secondNumber;
    
    // Prompt and capture input
    std::cout << "Enter first number: ";
    std::cin >> firstNumber;
    
    std::cout << "Enter second number: ";
    std::cin >> secondNumber;
    
    // Calculate total
    int sum = firstNumber + secondNumber;
    std::cout << "The sum is: " << sum << std::endl;
    
    // Conditional logic
    if (sum > 0) {
        std::cout << "The sum is a positive number." << std::endl;
    } else if (sum < 0) {
        std::cout << "The sum is a negative number." << std::endl;
    } else {
        std::cout << "The sum is exactly zero." << std::endl;
    }
    
    return 0;
}

Для массива из 1 000 000 элементов бинарный поиск сделает не более 20 сравнений (log₂ 1 000 000 ≈ 19.9). Линейный поиск в худшем случае — миллион.

Сложность алгоритма

Представь, что тебе нужно найти слово в толковом словаре. Ты открываешь книгу посередине и смотришь: твоё слово стоит левее или правее? Дальше повторяешь то же самое с оставшейся половиной. Это и есть бинарный поиск.

Представь, что тебе нужно найти слово в толковом словаре. Ты открываешь книгу посередине и смотришь: твоё слово стоит левее или правее? Дальше повторяешь то же самое с оставшейся половиной. Это и есть бинарный поиск.

Совет: в C++ вместо ручной реализации можно использовать lower_bound и upper_bound из <algorithm>. Они работают за O(log n) и возвращают итераторы.

Представь, что тебе нужно найти слово в толковом словаре. Ты открываешь книгу посередине и смотришь: твоё слово стоит левее или правее? Дальше повторяешь то же самое с оставшейся половиной. Это и есть бинарный поиск.

Представь, что тебе нужно найти слово в толковом словаре. Ты открываешь книгу посередине и смотришь: твоё слово стоит левее или правее? Дальше повторяешь то же самое с оставшейся половиной. Это и есть бинарный поиск.

Проверь себя

1.

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

2.

Сколько сравнений потребует бинарный поиск для массива из 1024 элементов в худшем случае?

3.

Сопоставьте карточки

Вариант 1

Ответ 2

Вариант 2

Ответ 1

Вариант 3

Ответ 3

4.

Сопоставьте карточки

Вариант Б

Вариант А

Вариант В

Ответ А

Ответ Б

Ответ В