Учебник по информатике и математике
Темы
Похожие темы
Бинарный поиск
Оглавление:
Представь, что тебе нужно найти слово в толковом словаре. Ты открываешь книгу посередине и смотришь: твоё слово стоит левее или правее? Дальше повторяешь то же самое с оставшейся половиной. Это и есть бинарный поиск.
Алгоритм работает только с отсортированным массивом — это ключевое условие. Каждый шаг вдвое уменьшает зону поиска, поэтому для массива из миллиона элементов потребуется не более 20 сравнений.
Идея алгоритма
Ключевая идея: на каждой итерации мы смотрим на средний элемент и выбрасываем половину, которая не может содержать ответ.
Алгоритм работает только с отсортированным массивом — это ключевое условие. Каждый шаг вдвое уменьшает зону поиска, поэтому для массива из миллиона элементов потребуется не более 20 сравнений.
Ключевая идея: на каждой итерации мы смотрим на средний элемент и выбрасываем половину, которая не может содержать ответ.
Алгоритм шаг за шагом
#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) и возвращают итераторы.
Представь, что тебе нужно найти слово в толковом словаре. Ты открываешь книгу посередине и смотришь: твоё слово стоит левее или правее? Дальше повторяешь то же самое с оставшейся половиной. Это и есть бинарный поиск.
Представь, что тебе нужно найти слово в толковом словаре. Ты открываешь книгу посередине и смотришь: твоё слово стоит левее или правее? Дальше повторяешь то же самое с оставшейся половиной. Это и есть бинарный поиск.
Проверь себя
Разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций.
Сколько сравнений потребует бинарный поиск для массива из 1024 элементов в худшем случае?
Сопоставьте карточки
Вариант 1
Ответ 2
Вариант 2
Ответ 1
Вариант 3
Ответ 3
Сопоставьте карточки
Вариант Б
Вариант А
Вариант В
Ответ А
Ответ Б
Ответ В