Существуют ли какие-либо общие методы для расчета сложности алгоритма? - PullRequest
1 голос
/ 02 ноября 2010

Интересно, есть ли какие-нибудь общепринятые или передовые методы, если нужно найти сложность алгоритмов?

Ответы [ 2 ]

6 голосов
/ 02 ноября 2010

O (1) означает, что вы выполняете серию инструкций постоянное число раз (что означает, что вы не используете циклы).

O (n) означает, что у вас есть один цикл, который выполняет O (1) операции внутри (например, я ищу в списке определенное значение).

O (log n) ищетчерез список, использующий интеллектуальную систему индексации, такую ​​как двоичное дерево или хэш-карта.С каждым проходом вы фактически исключаете половину возможностей (в отличие от O (n), который исключает их по одному).

O (n ^ 2) означает, что у вас есть внутренний и внешний цикл для выполнения перекрестных проверок (если бы я хотел циклически перебирать все элементы в сетке, я бы начал с циклического перебора всех строк, а затем каждогоячейка каждой строки, например).Вы можете обобщить это как O (n ^ m), где m представляет максимальную глубину цикла в вашей программе, которая повторяется n раз.

O (2 ^ n) означает, что вы циклически проходите все возможные комбинациимножество.Если у меня есть предметы {A, B}, то циклическое повторение каждой возможной комбинации приведет к {{}, {A}, {B}, {AB}}.

O (n!) Исчерпывает все возможные сценарии.Попытка взломать пароль с помощью грубой силы является примером O (n!).Вы не можете стать хуже, чем это, и алгоритмы, которые O (n!) Существуют, потому что нет никаких других альтернатив (например, P и NP завершены).

Это довольно быстрое резюме, но этоСуть этого.Технически циклы, которые циклически повторяются постоянно, равны O (1), если только он не содержит внутреннего цикла.Важно то, что вы не зацикливаетесь неизвестное количество раз.

4 голосов
/ 02 ноября 2010

Большой O является стандартным.

Хотя эта нотация разработана как часть чистой математики, в настоящее время она часто также используется при анализе алгоритмов для описания использования алгоритмом вычислительных ресурсов: наихудшее или среднее время выполнения или использование памяти алгоритмом часто выражается как функция длины его ввода с использованием больших обозначений O.

...