Сложность алгоритмов

Назначение анализа сложности алгоритмов — оценка того как ведет себя алгоритм при увеличении объема входящих данных. Анализ сложности может быть проведен с точки зрения скорости выполнения алгоритма и объема потребляемой памяти.

О-большое

Для анализа сложности применяется специальная математическая нотация — О-большое. О-большое определяет порядок роста в худшем случае. Это означает, что для алгоритма со сложностью при увеличении входных данных в 3 раза потребуется в 3 раза больше времени на выполнение, а для алгоритма со сложностью при таким же увеличении входных данных в 3 раза время выполнения увеличится уже в раз.

Так как О-большое определяет именно худший случай, то для алгоритма со сложностью в любом случае не потребует больше чем операций.

Часто встречаемые порядки сложности алгоритмов:

Сложность и физические характеристики

Анализ сложности применительно к скорости и памяти не определяет физические характеристики алгоритма. О-большое не связано с измерением времени в секундах или памяти в байтах. Сложность определяет зависимость между объемом входных данных и количеством операций алгоритма или объемом памяти. Точное время выполнения алгоритма будет зависит от аппаратного обеспечения компьютера на котором будет запущен алгоритм, сложность же напротив универсальна и платформонезависима.

Константы в О-большом

Так как в нотации О-большое имеет значение только порядок роста, то при его расчете не учитываются константы. Это приводит к тому, что при небольших значения алгоритмы с большим порядком роста могут работать быстрее чем с меньшим.

Например, есть два алгоритма со сложностью и . Константы и не используются в расчете О-большого, но в реальных алгоритмах они могут означать количество операций (сравнений, присваиваний и др.). Если , а . то при размере входных данных равном 10, алгоритмы будут выполнятся за 200 и 1000, получается, что алгоритм со сложностью выполняется быстрее. Но если размер данных увеличится до 100, то соотношение изменится: 100000 и 1000. При росте входных данных разница будет только расти.

Использование нотации О-большое

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

Другое назначение нотации — способ сравнения алгоритмов между собой.

Ссылки

Ссылки на эту заметку

Эта заметка на GitHub

Обсудить на форуме

Последниее изменение: