Да, вложенные циклы - это один из способов быстро получить большие обозначения O.
Обычно (но не всегда) один цикл, вложенный в другой, вызывает O (n²).
Подумайте об этом, внутренний цикл выполняется i раз, для каждого значения i .
Внешний цикл выполняется n раз.
таким образом, вы видите схему исполнения, подобную этой:
1 + 2 + 3 + 4 + ... + n раз
Следовательно, мы можем ограничить количество выполнений кода, сказав, что он, очевидно, выполняется более n раз (нижняя граница), но с точки зрения n, сколько раз мы выполняем код?
Ну, математически мы можем сказать, что он будет выполняться не более n² раз, что дает нам сценарий наихудшего случая и, следовательно, нашу оценку Big-Oh O (n²). (Для получения дополнительной информации о том, как мы можем математически выразить это, посмотрите на Power Series )
Big-Oh не всегда точно измеряет объем работы, но обычно дает надежное приближение к худшему сценарию.
4 года спустя Редактировать: Поскольку этот пост, похоже, получает достаточное количество трафика. Я хочу более полно объяснить, как мы связываем выполнение с O (n²), используя степенные ряды
С веб-сайта: 1 + 2 + 3 + 4 ... + n = (n² + n) / 2 = n² / 2 + n / 2. Как же тогда мы превращаем это в O (n²)? Мы (в основном) говорим, что n²> = n² / 2 + n / 2. Это правда? Давайте сделаем простую алгебру.
- Умножьте обе стороны на 2, чтобы получить: 2n²> = n² + n?
- Разверните 2n², чтобы получить: n² + n²> = n² + n?
- Вычтите n² с обеих сторон, чтобы получить: n²> = n?
Должно быть ясно, что n²> = n (не строго больше, чем, из-за случая, когда n = 0 или 1), предполагая, что n всегда является целым числом.
Фактическая сложность Big O немного отличается от того, что я только что сказал, но это суть. В действительности сложность Big O спрашивает, существует ли константа, которую мы можем применить к одной функции, чтобы она была больше другой, для достаточно большого ввода (см. Страницу wikipedia )