Алгоритмы вокруг нас
Алгоритм звучит как что-то из учебника информатики, но мы пользуемся алгоритмами постоянно: когда ищем слово в словаре, раскладываем карты по порядку или выбираем дорогу домой. Разбираем самые известные алгоритмы на бытовых примерах и показываем, почему хороший способ решения важнее мощного компьютера.
Для 5–11 классов, информатика и математика.
Что такое алгоритм
Алгоритм это точная последовательность шагов, которая приводит к результату. Рецепт пирога, инструкция к шкафу из магазина, правило сложения в столбик: всё это алгоритмы. Важно, чтобы шаги были однозначными и их мог выполнить кто угодно, даже тот, кто не понимает смысла.
Слово происходит от имени персидского учёного IX века аль-Хорезми. Он написал книгу о том, как считать в десятичной системе, и в латинском переводе его имя превратилось в Algoritmi. От названия другой его книги произошло слово «алгебра».
Один и тот же результат можно получить разными алгоритмами. И разница между ними бывает огромной: один способ решает задачу за секунду, другой за тысячу лет на том же компьютере.
Двоичный поиск: игра «угадай число»
Друг загадал число от 1 до 100. Вы называете число, он отвечает «больше» или «меньше». Как угадать быстрее всего?
Можно перебирать по порядку: 1, 2, 3… В худшем случае понадобится сто попыток. А можно каждый раз называть середину оставшегося промежутка: 50, потом 25 или 75, и так далее. Каждый ответ отбрасывает половину вариантов.
100 → 50 → 25 → 13 → 7 → 4 → 2 → 1
Хватит семи вопросов. Для чисел от 1 до 1000 хватит десяти, а от 1 до миллиона двадцати, потому что 2²⁰ чуть больше миллиона. Сто миллиардов потребуют всего 37 вопросов.
Так вы ищете слово в бумажном словаре: открываете посередине и решаете, в какую половину идти. Так программы ищут запись в отсортированной базе данных. Есть только одно условие: данные должны быть упорядочены. В неупорядоченной куче остаётся только перебор.
Сортировка: как разложить по порядку
Как разложить по росту класс из 30 человек? Простой способ, сортировка пузырьком: идти вдоль шеренги, сравнивать соседей и менять местами, если левый выше правого. Повторять, пока перестановки не закончатся. Самый высокий за каждый проход «всплывает» в конец, как пузырёк.
Способ понятный, но медленный. Для n элементов нужно примерно n² сравнений. Для 30 человек это сотни сравнений, терпимо. Для миллиона чисел уже триллион.
Быстрый способ, сортировка слиянием: разделить класс пополам, каждую половину отсортировать тем же способом, а потом слить две упорядоченные шеренги в одну, каждый раз беря меньшего из двух первых. Половины делятся на четверти, четверти на восьмые, пока не останутся пары.
| Элементов | Пузырьком, примерно | Слиянием, примерно |
|---|---|---|
| 1 000 | 1 000 000 сравнений | 10 000 сравнений |
| 1 000 000 | 10¹² сравнений | 20 000 000 сравнений |
При миллионе элементов разница в пятьдесят тысяч раз. Если быстрый способ работает секунду, медленный будет считать почти 14 часов. Никакой новый компьютер не даст такого ускорения, а правильный алгоритм даёт.
Где ещё спрятаны алгоритмы
- Сжатие. Архиватор находит в файле повторы и записывает их коротко: вместо «ааааааа» хранит «7 раз а». Так работают и ZIP, и форматы картинок.
- Рекомендации. Лента видео подбирает ролики по тому, что смотрели люди с похожими вкусами. Подробнее в статье о ленте рекомендаций.
- Проверка ошибок. Последняя цифра номера банковской карты контрольная: по особому правилу она вычисляется из остальных, и опечатка в одной цифре сразу видна.
- Кубик Рубика. Доказано, что любую раскраску кубика можно собрать не больше чем за 20 поворотов. Для доказательства понадобились годы вычислений.
Задачи
Задача
В отсортированном списке 4000 фамилий. За сколько сравнений в худшем случае двоичный поиск найдёт нужную фамилию или поймёт, что её нет?
Каждое сравнение делит список пополам. Нужно найти, сколько раз надо удвоить 1, чтобы получить не меньше 4000.
2¹¹ = 2048 меньше 4000, 2¹² = 4096 больше.
Ответ: за 12 сравнений.
Задача
Есть 8 монет, одна из них фальшивая и легче остальных. Как найти её за два взвешивания на чашечных весах без гирь?
Положим по три монеты на каждую чашу, две отложим.
Если весы в равновесии, фальшивая среди двух отложенных: сравним их, лёгкая и есть фальшивая.
Если одна чаша легче, фальшивая среди её трёх монет: кладём по одной на чаши. Равновесие значит, что фальшивая третья, иначе это более лёгкая.
Ответ: два взвешивания, если делить монеты на три группы.
Обратите внимание: во второй задаче мы делим не пополам, а на три части, потому что у весов три исхода. Это то же мышление, что в двоичном поиске, и оно отлично тренируется на олимпиадных задачах.
Разберём на занятии
Занимаемся по всем школьным предметам с 4 по 11 класс: живые занятия, общая доска и домашка, которую проверяет тот же преподаватель.
Первое занятие бесплатное: можно посмотреть формат вместе с ребёнком и решить, подходит ли он.
Частые вопросы
Чем алгоритм отличается от программы?
Алгоритм это сама идея, последовательность шагов. Программа это запись алгоритма на языке, который понимает компьютер. Один алгоритм можно записать на Python, C++ или словами на бумаге.
Где алгоритмы проходят в школе?
В информатике с 7–8 класса: исполнители, циклы, ветвления. На ОГЭ и ЕГЭ есть задания на исполнение алгоритмов, а в ЕГЭ ещё и на их программирование.