Открывается в новой вкладке

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

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

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

Заявка принята!

Мы уже получили заявку и скоро свяжемся. Расскажите немного о ребёнке — так быстрее подберём группу (необязательно).

Спасибо!

Мы свяжемся с вами в ближайшее время.

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

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

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

    Оглавление:

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

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

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

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

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

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

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

    #include <iostream>  // Required for printing and reading text
    #include <string>    // Required to use the std::string data type
    
    // 1. Defining a basic function
    // This function takes two integers and returns their sum
    int addNumbers(int a, int b) {
        return a + b;
    }
    
    // 2. The main function where execution always begins
    int main() {
        // ---- VARIABLES & OUTPUT ----
        std::string greeting = "Welcome to C++!";
        std::cout << greeting << std::endl; // Prints the string and moves to a new line
    
        // ---- USER INPUT & CALCULATIONS ----
        int num1 = 0;
        int num2 = 0;
    
        std::cout << "Enter the first number: ";
        std::cin >> num1; // Reads user input and stores it in num1
    
        std::cout << "Enter the second number: ";
        std::cin >> num2; // Reads user input and stores it in num2
    
        // Calling our custom function and storing the result
        int sum = addNumbers(num1, num2);
        std::cout << "The sum of your numbers is: " << sum << std::endl;
    
        // ---- CONDITIONAL STATEMENTS (IF / ELSE) ----
        if (sum > 100) {
            std::cout << "That is a large number!" << std::endl;
        } else {
            std::cout << "That is a small or moderate number." << std::endl;
        }
    
        // ---- FOR LOOP ----
        std::cout << "Counting down from 3:" << std::endl;
        for (int i = 3; i > 0; i--) {
            std::cout << i << "... " << std::endl;
        }
        std::cout << "Blast off!" << std::endl;
    
        // Return 0 to indicate the program executed successfully
        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

    Ответ 1

    Вариант 2

    Ответ 3

    Вариант 3

    Ответ 2

    4.

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

    Вариант В

    Вариант А

    Вариант Б

    Ответ А

    Ответ Б

    Ответ В

    Поможем подобрать обучение

    Оставьте телефон. Мы перезвоним, поможем выбрать подходящие занятия и ответим на вопросы

    Поможем подобрать обучение

    Заявка принята.

    Мы свяжемся с вами