Какие знаешь виды алгоритмической сложности

«Какие знаешь виды алгоритмической сложности» — вопрос из категории Алгоритмы, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

O(1) – константная сложность. Время выполнения не зависит от размера входных данных.
Пример: доступ к элементу массива по индексу.

const arr = [1, 2, 3];
console.log(arr[0]); // O(1)

O(n) – линейная сложность. Время растёт пропорционально размеру входных данных.
Пример: перебор массива.

for (let i = 0; i < arr.length; i++) { // O(n)
  console.log(arr[i]);
}

O(log n) – логарифмическая сложность. Время растёт логарифмически (например, бинарный поиск).

O(n²) – квадратичная сложность. Время растёт квадратично (например, вложенные циклы).

for (let i = 0; i < n; i++) { // O(n²)
  for (let j = 0; j < n; j++) {
    console.log(i, j);
  }
}

O(2ⁿ) – экспоненциальная сложность. Время удваивается с каждым увеличением входных данных (например, рекурсивный Фибоначчи без мемоизации).

O(n!) – факториальная сложность. Наихудший случай (например, перебор всех перестановок).