Назад к вопросам
Junior
69
questionbank

Что такое нотация Большого O?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Нотация Большого O (или O-нотация) — способ описания асимптотического поведения функции, чаще всего используемый для анализа эффективности алгоритмов, т.е. того, как время выполнения или объем используемой памяти алгоритма масштабируется с увеличением размера входных данных.

Основные аспекты:

  • Верхняя граница: O-нотация описывает верхнюю границу роста функции, игнорируя константы и младшие члены. Это показывает наихудший сценарий производительности.
  • Асимптотическое поведение: Она фокусируется на поведении функции при стремлении размера входных данных к бесконечности.
  • Сравнение алгоритмов: Позволяет сравнивать алгоритмы независимо от конкретного оборудования или языка программирования.

Примеры распространенных классов сложности:

Нотация Название Описание Пример операции в алгоритме
O(1) Константное время Время выполнения не зависит от размера входных данных. Доступ к элементу массива по индексу.
O(log n) Логарифмическое время Время выполнения растет логарифмически с размером данных. Бинарный поиск в отсортированном массиве.
O(n) Линейное время Время выполнения пропорционально размеру данных. Простой перебор всех элементов в списке.
O(n log n) Линейно-логарифмическое Время выполнения растет пропорционально n * log n. Быстрая сортировка (в среднем), сортировка слиянием.
O(n^2) Квадратичное время Время выполнения пропорционально квадрату размера данных. Сортировка пузырьком, вложенные циклы по n элементам.
O(2^n) Экспоненциальное время Время выполнения растет экспоненциально. Некоторые задачи полного перебора, например, задача коммивояжера (в наивных реализациях).
# Пример O(1)
def get_first_element(arr):
    return arr[0] # Время выполнения постоянно, независимо от размера arr

# Пример O(n)
def find_max(arr):
    max_val = arr[0]
    for element in arr: # Итерация по всем элементам
        if element > max_val:
            max_val = element
    return max_val

# Пример O(n^2)
def print_pairs(arr):
    for i in arr: # Первый вложенный цикл
        for j in arr: # Второй вложенный цикл
            print(i, j)