Встречается на собеседованиях • сегодня

Что такое О большое (Big O notation)

О большое (Big O notation) — это математическая нотация, которая описывает асимптотическую сложность алгоритмов. Она показывает, как время выполнения или объем используемой памяти алгоритма растут с увеличением размера входных данных (n).

Big O описывает худший сценарий. На практике алгоритм с большей сложностью может работать быстрее на малых данных из-за констант (например, O(n) может уступать O(1) только при больших n).

Зачем нужно?

- Сравнение алгоритмов: Позволяет оценить эффективность алгоритмов без привязки к конкретному железу.

- Прогнозирование производительности: Помогает предсказать, как алгоритм будет работать на больших данных.

- Оптимизация кода: Выявление «узких мест» в программе.

Основные виды сложности:

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

- O(log n) — Логарифмическая сложность
Время растет логарифмически от размера данных.
Пример: бинарный поиск.

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

- O(n log n) — Линейно-логарифмическая сложность
Характерна для эффективных алгоритмов сортировки.
Пример: быстрая сортировка (quicksort).

- O(n²) — Квадратичная сложность
Время растет пропорционально квадрату размера данных.
Пример: вложенные циклы (пузырьковая сортировка).

- O(2ⁿ) — Экспоненциальная сложность
Время удваивается с каждым新增 элемента.
Пример: рекурсивное вычисление чисел Фибоначчи.

- O(n!) — Факториальная сложность
Худший случай, характерен для задач перебора.
Пример: решение задачи коммивояжера полным перебором.

Как вычисляется?

- Игнорируются константы: O(2n) → O(n), O(500) → O(1).

- Учитывается только старший член: O(n² + n) → O(n²).

Примеры:

text
# O(1) — постоянная сложность
def get_first_element(arr):
    return arr[0]

# O(n) — линейная сложность
def find_max(arr):
    max_val = arr[0]
    for num in arr:  # Один цикл
        if num > max_val:
            max_val = num
    return max_val

# O(n²) — квадратичная сложность
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):          # Внешний цикл
        for j in range(n-1):    # Внутренний цикл
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы