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

Говорят, что если оценка есть или или … где константа, то алгоритм называется полиномиальным (если показатель степени небольшой, то ещё и называется эффективным).

Ну, например, простейшая сортировка массива методом выбора имеет сложность (Православные сортировки имеют сложность ) Что это означает? Что если мы будем увеличивать длину входа в раз, то количество операций, выполняемых компьютером, будет увеличиваться в раз, где некая константа. Например, если увеличить в 5, 10, 20, 30, 40 раз, а то количество операций будет увеличиваться в раз.

А вот если алгоритм имеет сложность или вместо 2 любое другое константное основание, то его называют экспоненциальным (пример любой переборный алгоритм). Тогда, даже если то при увеличении длины входа в 5, 10, 20, 30, 40 раз количество операций будет увеличиваться соответственно в раз. Что называется, почувствуйте разницу. Теперь, что такое вообще длина входа и количество операций, в чём их мерить? это биты, символы или количество строк? А количество операций это ассемблерные команды, количество шагов Машины Тьюринга, операторы C или что-то ещё? А вот в том-то и дело, что неважно, ведь у нас оценка не абсолютная, а асимптотическая, нам важно лишь, как меняется относительная скорость работы алгоритма по сравнению с относительным изменением количества входных данных, поэтому все эти конкретные коэффициенты попадут в это Главное, какие команды мы обзовём элементарными. Ясно, что какой-нибудь метод list.sort() не тянет на элементарную. Как получить эту оценку? Правильный ответ подумать головой. И решить задачку: во сколько раз увеличится количество операций при увеличении длины входа в 10, 20, 30, 40 раз? и увидеть эту функцию Иногда придётся доказать теорему. На практике обращают внимание на количество итераций циклов, на уровень вложенности циклов, и на вызовы функций, зависящих от n. Простой цикл for (int i = 0; i < n; i++) {...} (Си) даёт оценку двойной цикл for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) {...} (Си) уже если их тела тривиальны и не зависят от Если в теле циклов вызываются функции, которые сами по себе тоже зависят от то это добавляет сложности и это тоже надо учитывать.