Пт. Окт 16th, 2026
Оценка сложности вычислений

Оценка сложности вычислений

Теория для подготовки к ЕГЭ по информатике. Раздел 3.2: Оценка сложности алгоритмов, время работы и объем памяти.

Понятие сложности алгоритмов

Сложность алгоритма — это оценка количества ресурсов (времени и памяти), необходимых для его выполнения.

Два основных вида сложности:

  • Временная сложность — количество операций, выполняемых алгоритмом
  • Пространственная сложность — объем памяти, используемый алгоритмом
Время Память Количество операций Объем памяти Сложность алгоритма

Зависимость от размера данных:

Сложность алгоритма обычно выражается как функция от размера входных данных n.

Например, для массива из n элементов сложность может быть O(n), O(n²), O(log n) и т.д.

Время работы и объем памяти

Время работы и объем памяти — ключевые характеристики производительности алгоритма.

Время работы:

  • Зависит от количества элементарных операций
  • Измеряется в количестве шагов выполнения
  • Зависит от аппаратного обеспечения, но оценка сложности абстрагируется от этого

Объем памяти:

  • Зависит от количества хранимых данных
  • Включает память для входных данных, промежуточных результатов и выходных данных
  • Особенно важен для устройств с ограниченной памятью
Размер входных данных (n) Сложность Время Память Зависимость сложности от размера данных

Важно: При оценке сложности мы рассматриваем наихудший случай (worst-case scenario), чтобы гарантировать производительность при любых входных данных.

Асимптотическая сложность алгоритмов

Асимптотическая сложность описывает поведение алгоритма при больших размерах входных данных с помощью О-нотации (нотации «О-большое»).

Основные асимптотические сложности:

  • O(1) — постоянная сложность
  • O(log n) — логарифмическая сложность
  • O(n) — линейная сложность
  • O(n log n) — линейно-логарифмическая сложность
  • O(n²) — квадратичная сложность
  • O(2ⁿ) — экспоненциальная сложность
  • O(n!) — факториальная сложность
O(1)
Постоянная
O(log n)
Логарифмическая
O(n)
Линейная
O(n log n)
Линейно-логарифмическая
O(n²)
Квадратичная
O(2ⁿ)
Экспоненциальная

Правила упрощения О-нотации:

  • Константы игнорируются: O(2n) = O(n)
  • Младшие слагаемые игнорируются: O(n² + n) = O(n²)
  • Основание логарифма не указывается: O(log₂n) = O(log n)
Размер входных данных (n) Время выполнения O(1) O(log n) O(n) O(n²)

Алгоритмы полиномиальной сложности

Алгоритмы полиномиальной сложности — это алгоритмы, время работы которых ограничено полиномом от размера входных данных.

Полиномиальные сложности:

  • O(1) — постоянное время
  • O(log n) — логарифмическое время
  • O(n) — линейное время
  • O(n log n) — линейно-логарифмическое время
  • O(n²) — квадратичное время
  • O(n³) — кубическое время
  • O(nᵏ) — полиномиальное время (для некоторого k)

Примеры полиномиальных алгоритмов:

  • Линейный поиск — O(n)
  • Бинарный поиск — O(log n)
  • Сортировка пузырьком — O(n²)
  • Быстрая сортировка — O(n log n)
  • Умножение матриц — O(n³)
Класс P Полиномиальные алгоритмы O(n) O(n²) O(n³) Полиномиальная сложность

Важно: Алгоритмы полиномиальной сложности считаются эффективными и масштабируемыми для больших объемов данных.

Переборные алгоритмы

Переборные алгоритмы (алгоритмы полного перебора) решают задачу путем проверки всех возможных вариантов.

Характеристики переборных алгоритмов:

  • Имеют высокую сложность (часто экспоненциальную или факториальную)
  • Просты в реализации
  • Гарантированно находят решение (если оно существует)
  • Практически неприменимы для больших объемов данных

Примеры переборных алгоритмов:

  • Полный перебор паролей — O(mⁿ), где m — размер алфавита, n — длина пароля
  • Задача коммивояжера полным перебором — O(n!)
  • Поиск всех подмножеств множества — O(2ⁿ)
  • Поиск всех перестановок — O(n!)
Размер входных данных (n) Время выполнения O(2ⁿ) O(n!) Сложность переборных алгоритмов

Важно: Для задач с переборными алгоритмами часто ищут эвристики или приближенные алгоритмы, чтобы уменьшить сложность.

Примеры алгоритмов с разной сложностью

Рассмотрим различные алгоритмы для решения задачи поиска в массиве и их сложность.

Задача: Найти элемент в массиве из n элементов.

Алгоритм Временная сложность Пространственная сложность Примечания
Линейный поиск O(n) O(1) Простой перебор всех элементов
Бинарный поиск O(log n) O(1) Требует предварительной сортировки массива
Поиск в хеш-таблице O(1) O(n) Требует дополнительной памяти для хеш-таблицы

Задача: Отсортировать массив из n элементов.

Алгоритм Временная сложность Пространственная сложность Примечания
Сортировка пузырьком O(n²) O(1) Простая, но неэффективная для больших массивов
Быстрая сортировка O(n log n) O(log n) Эффективный алгоритм на практике
Сортировка слиянием O(n log n) O(n) Стабильная, но требует дополнительной памяти
Сортировка подсчетом O(n + k) O(n + k) Эффективна когда k (диапазон значений) небольшой
Выбор алгоритма Данные Память Время Алгоритм Факторы выбора алгоритма

Важно: Выбор алгоритма зависит от конкретной задачи, размера данных, ограничений по памяти и времени.