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), если только он не содержит внутреннего цикла.Важно то, что вы не зацикливаетесь неизвестное количество раз.