Назад к вопросам
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)