Почему рост данных меняет всё

Big O — способ описать, как увеличивается объём работы алгоритма, когда растёт вход: например, список записей или число точек на карте. Это не секундомер и не точный прогноз времени. Обозначение показывает характер роста, отвлекаясь от конкретного компьютера и постоянных затрат.

Представим поиск имени в несортированном списке. В худшем случае придётся проверить каждую запись: если записей стало вдвое больше, проверок тоже станет примерно вдвое больше. Такой рост обозначают O(n), где n — размер входных данных. Если список отсортирован и алгоритм каждый раз отбрасывает половину оставшегося диапазона, число шагов растёт гораздо медленнее — примерно как логарифм n.

Когда повторная работа становится ловушкой

Некоторые алгоритмы сравнивают каждую пару объектов. Для n объектов это может потребовать порядка n² сравнений: удвоение списка тогда увеличивает работу примерно в четыре раза. При миллионе элементов такая разница между линейным и квадратичным ростом уже способна превратить быструю задачу в практически неподъёмную.

Поэтому Big O особенно полезен не для маленького примера, а для будущего масштаба. Алгоритм, который мгновенно обрабатывает сотню записей, может оказаться плохим выбором, если данные вырастут до миллионов. И наоборот, более сложная в реализации структура поиска может окупиться, если она сокращает число проверок.

Это оценка масштаба, а не таймер

В записи Big O обычно не учитывают множители и менее значимые слагаемые: при достаточно большом n важнее понять, растёт ли работа как n, n² или ещё быстрее. Но реальное время зависит также от устройства, программной реализации и самих данных. Поэтому оценка помогает сравнивать подходы и замечать опасный рост заранее, а не обещает конкретное число секунд.

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