Асимптотическая оценка описывает, как растёт время работы (или память) с ростом длины входа, без точных констант. Три оценки: — сверху, — снизу, — с обеих сторон.

Зачем нужно

Точное число тактов вида зависит от мелочей реализации, а замеры дают ломаную с колебаниями. Сравнивать алгоритмы удобнее по тенденции: растёт ли время как , как или как . При это разница между секундой и годами.

Как работает

Пусть — число тактов, — функция, с которой сравниваем.

O — оценка сверху

— «наши данные оценены сверху функцией »:

До какого-то N функция может вести себя как угодно, но дальше она всегда не выше .

Ω — оценка снизу

Θ — оценка с двух сторон

После N функция зажата между и .

Шкала асимптотик

От медленного роста к быстрому:

ОценкаНазвание
константа
логарифм
корневая
линейная
…

означает : время ограничено константой и от N не зависит.

При и тактах в секунду:

Время работыТактовСекунд
1

Константы и младшие слагаемые отбрасываются

: если , то с . Множитель уходит в константу из определения.

: младшее слагаемое поглощается старшим. Так же в подсчёте для цикла — см. Циклы.

Тонкости

  • Основание логарифма может быть любым — так сказали на лекции. Почему — в блоке ниже.
  • В определениях важно «существует N, начиная с которого»: на малых входах оценка может не выполняться, и это нормально.
  • не говорит, что алгоритм обязательно работает так долго, — только что не дольше. Точный порядок роста даёт .

Не из лекции: почему основание логарифма не важно

— логарифмы по разным основаниям отличаются постоянным множителем, а он поглощается константой из определения. Поэтому пишут просто .

Частые ошибки

  • Путать (сверху), (снизу) и (с обеих сторон).
  • Писать константы и основания внутри оценки: , .
  • Считать, что break в цикле улучшает оценку. В худшем случае он не срабатывает — см. вариант «б» проверки на простоту.

Углубление — АиСД L02

Оценка памяти

Рядом с временем на лекции теперь записывают и память: у разложения на множители, линейного и бинарного поиска . Дополнительная память ограничена константой — несколько переменных, сколько бы ни был вход. См. Время работы алгоритма.

Оценка от двух аргументов

У алгоритма Евклида вход — два числа, и оценка зависит от обоих: для версии с вычитанием, для версии с остатком.

Не из лекции: почему

. Функции отличаются не больше чем в 2 раза, а постоянный множитель поглощается константой из определения.

Откуда берётся логарифм

Если каждый шаг уменьшает задачу вдвое, после шагов остаётся . Задача кончается, когда остался один элемент:

Так на лекции получили для бинарного поиска.

Сравнение на большом входе

При : — это итераций, около секунд; — итераций, около секунды.

Углубление — АиСД L03

Новые точки на шкале

  • — Решето Эратосфена. растёт так медленно, что на практике это почти линейное время: при .
  • — тривиальная Сортировка: перемешивать, пока не отсортируется. Уже при это перестановок.

Одна оценка — разное поведение

У трёх квадратичных сортировок на лекции одна и та же оценка .

Не из лекции: лучший и худший случай

— оценка сверху на худшем входе, и за ней может прятаться разное. Выбор и пузырёк делают сравнений на любом входе. Вставки делают на массиве по убыванию, но только сравнений на уже отсортированном. Когда важно, что оценка достигается всегда, пишут .

Не из лекции: ожидаемое время

У тривиальной сортировки — не худший случай, а среднее по случайным перестановкам. Худшего случая у неё нет: может не повезти сколько угодно раз подряд.

Углубление — АиСД L04

Появляется, когда задачу делят пополам ( уровней) и на каждом уровне делают линейную работу: — Сортировка слиянием.

При : — около секунд при операций в секунду; — около 0,2 секунды. Здесь .

как оценка для целого класса алгоритмов

Теорема с лекции: никакая сортировка сравнением не работает быстрее . Здесь ограничивает снизу не один алгоритм, а все алгоритмы определённого вида. Доказательство — в Сортировка.

Не из лекции: что из этого следует

Если у задачи есть нижняя оценка , а у алгоритма — верхняя , алгоритм асимптотически оптимален: лучше сделать нельзя, можно только улучшить константу. Сортировка слиянием — такой алгоритм.