← Все вопросы

Как оценить сложность вложенного цикла, если внутренний идёт до i, а не до n?

Задан 2 месяца назад531 просмотров3 ответа
14

Часто пишут так:

for i in range(n):
    for j in range(i):
        do_something()

Внутренний цикл крутится не n раз, а i раз. Это всё ещё O(n^2) или меньше? Как правильно посчитать?

3 ответа

22
✓ Принятый ответ — помог автору

Это O(n^2). Суммарное число итераций внутреннего цикла = 0+1+2+...+(n-1) = n*(n-1)/2. Это примерно n^2/2, а константу 1/2 в О-нотации выбрасывают, поэтому остаётся O(n^2). Главный признак: даже если граница переменная, но в среднем она пропорциональна n, итераций всё равно порядка n^2. Уменьшение в 2 раза асимптотику не меняет.

Ivan Ivanov Та самая формула арифметической прогрессии, которую все проходили в школе и забыли 🙂 · 2 месяца назад
9

O(n^2).

-5

O(n), внутренний же не до n идёт.

Иван Кудрявцев Нет. Сумма от 1 до n это ~n^2/2, а не n. Посчитай для n=1000 руками. · 2 месяца назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект