Когда короткий код оказывается дорогим: алгоритмы и структуры данных на практике

public

Автор: Артём Вурсалов · Yandex for Frontend


Доклад из серии Yandex for Frontend — короткое введение в алгоритмы и структуры данных для frontend-разработчиков. Это не попытка за час пересказать университетский курс, а разговор о базовом инженерном навыке: уметь оценивать цену решения до того, как оно начнёт тормозить на реальных данных.

Рабочий код ещё не значит хороший код. Два решения могут одинаково проходить тесты, но по-разному расходовать время и память. Вурсалов показывает это на простых примерах: палиндром, массивы, объекты, Set, Map, O-нотация. Смысл не в том, чтобы выучить набор обозначений, а в том, чтобы начать задавать правильный вопрос: что произойдёт с этим кодом, когда входных данных станет в десять, сто или тысячу раз больше?

Кому смотреть: frontend-разработчикам на JavaScript, которые хотят понять что такое O-нотация и как ею пользоваться на практике — без погружения в теорию вычислений.

Из этого можно взять в работу: взять любую функцию из своего кода, которая работает с массивом, и спросить — сколько операций она совершает при массиве размером N? Если ответ «не знаю» — это отправная точка.


Практический пример из доклада — проверка палиндрома. Вурсалов показывает два решения на JavaScript: короткий вариант через split/reverse/join и более явный алгоритм. Оба дают правильный ответ, но отличаются по количеству операций и дополнительной памяти. Именно здесь абстрактная «сложность алгоритма» становится конкретной: важно не только что код делает, но и какую цену он за это платит.

Вычислительная сложность нужна как способ сравнивать решения: не время в секундах (зависит от железа, окружения и нагрузки), а количество операций в зависимости от размера входных данных. O(n) — линейно, O(n²) — квадратично, O(1) — константно. Frontend-разработчики работают с DOM, массивами данных и рендерингом — везде выбор алгоритма влияет на производительность.

Отдельно разбираются стандартные структуры данных JavaScript: массив, объект, Set, Map. У каждой из них своя цена доступа, поиска, вставки и удаления. Поэтому выбор структуры данных — это не вкусовщина и не привычка, а часть решения задачи.