foundation
Нотация Big O
Оценивайте время, память, амортизацию и лучший, средний и худший случаи.
Big O описывает рост, а не точную скорость. На интервью ожидают, что вы определите размер входа, найдёте доминирующую операцию и объясните, почему константы можно отбросить только после ясной модели. Главный компромисс — точность против полезности: Big O скрывает железо и константы, но помогает сравнивать алгоритмы при росте входа.
Пример:
const seen = new Set();
for (const value of values) seen.add(value);
Цикл имеет O(n) по времени в среднем и O(n) по памяти, потому что каждый элемент обрабатывается один раз и хранится максимум один раз.
На интервью: разделяйте лучший, средний, худший и амортизированный случаи. Упоминайте, когда вложенный цикл всё ещё O(n), потому что указатели движутся монотонно.
Типовые ошибки: называть любой вложенный цикл O(n²); игнорировать память; забывать амортизированное поведение у динамических массивов и hash table.
Чеклист:
- Определите n перед оценкой.
- Назовите время и память.
- Разделите best, average, worst и amortized cases.
- Проговорите допущение о структуре данных.