Асимптотическая оценка описывает, как растёт время работы (или память) с ростом длины входа, без точных констант. Три оценки: — сверху, — снизу, — с обеих сторон.
Зачем нужно
Точное число тактов вида зависит от мелочей реализации, а замеры дают ломаную с колебаниями. Сравнивать алгоритмы удобнее по тенденции: растёт ли время как , как или как . При это разница между секундой и годами.
Как работает
Пусть — число тактов, — функция, с которой сравниваем.
O — оценка сверху
— «наши данные оценены сверху функцией »:
До какого-то N функция может вести себя как угодно, но дальше она всегда не выше .
Ω — оценка снизу
Θ — оценка с двух сторон
После N функция зажата между и .
Шкала асимптотик
От медленного роста к быстрому:
| Оценка | Название |
|---|---|
| константа | |
| логарифм | |
| корневая | |
| линейная | |
| … | |
означает : время ограничено константой и от N не зависит.
При и тактах в секунду:
| Время работы | Тактов | Секунд |
|---|---|---|
| 1 | ||
Константы и младшие слагаемые отбрасываются
: если , то с . Множитель уходит в константу из определения.
: младшее слагаемое поглощается старшим. Так же в подсчёте для цикла — см. Циклы.
Тонкости
- Основание логарифма может быть любым — так сказали на лекции. Почему — в блоке ниже.
- В определениях важно «существует N, начиная с которого»: на малых входах оценка может не выполняться, и это нормально.
- не говорит, что алгоритм обязательно работает так долго, — только что не дольше. Точный порядок роста даёт .
Не из лекции: почему основание логарифма не важно
— логарифмы по разным основаниям отличаются постоянным множителем, а он поглощается константой из определения. Поэтому пишут просто .
Частые ошибки
- Путать (сверху), (снизу) и (с обеих сторон).
- Писать константы и основания внутри оценки: , .
- Считать, что
breakв цикле улучшает оценку. В худшем случае он не срабатывает — см. вариант «б» проверки на простоту.
Углубление — АиСД L02
Оценка памяти
Рядом с временем на лекции теперь записывают и память: у разложения на множители, линейного и бинарного поиска . Дополнительная память ограничена константой — несколько переменных, сколько бы ни был вход. См. Время работы алгоритма.
Оценка от двух аргументов
У алгоритма Евклида вход — два числа, и оценка зависит от обоих: для версии с вычитанием, для версии с остатком.
Не из лекции: почему
. Функции отличаются не больше чем в 2 раза, а постоянный множитель поглощается константой из определения.
Откуда берётся логарифм
Если каждый шаг уменьшает задачу вдвое, после шагов остаётся . Задача кончается, когда остался один элемент:
Так на лекции получили для бинарного поиска.
Сравнение на большом входе
При : — это итераций, около секунд; — итераций, около секунды.
Углубление — АиСД L03
Новые точки на шкале
- — Решето Эратосфена. растёт так медленно, что на практике это почти линейное время: при .
- — тривиальная Сортировка: перемешивать, пока не отсортируется. Уже при это перестановок.
Одна оценка — разное поведение
У трёх квадратичных сортировок на лекции одна и та же оценка .
Не из лекции: лучший и худший случай
— оценка сверху на худшем входе, и за ней может прятаться разное. Выбор и пузырёк делают сравнений на любом входе. Вставки делают на массиве по убыванию, но только сравнений на уже отсортированном. Когда важно, что оценка достигается всегда, пишут .
Не из лекции: ожидаемое время
У тривиальной сортировки — не худший случай, а среднее по случайным перестановкам. Худшего случая у неё нет: может не повезти сколько угодно раз подряд.
Углубление — АиСД L04
Появляется, когда задачу делят пополам ( уровней) и на каждом уровне делают линейную работу: — Сортировка слиянием.
При : — около секунд при операций в секунду; — около 0,2 секунды. Здесь .
как оценка для целого класса алгоритмов
Теорема с лекции: никакая сортировка сравнением не работает быстрее . Здесь ограничивает снизу не один алгоритм, а все алгоритмы определённого вида. Доказательство — в Сортировка.
Не из лекции: что из этого следует
Если у задачи есть нижняя оценка , а у алгоритма — верхняя , алгоритм асимптотически оптимален: лучше сделать нельзя, можно только улучшить константу. Сортировка слиянием — такой алгоритм.