Чтобы найти временной сложности, давайте проанализируем, сколько раз запустить ядро (внутри петли).
Наружный цикл выполняется n раз, поэтому сложность не менее O (n).
Внутренний цикл выполняется
- один раз, когда я = 1
- дважды при I = 2
- ... N раз, когда я = п
Таким образом, общее число раз он будет выполняться - это сумма целых чисел между 1 и n: (n * (n + 1))/2 = n^2/2 + n/2, которая равна O (n^2).
Сложная сложность с другой стороны в этом случае проще. Поскольку требования к памяти не зависят от входной длины, сложность пространства вышеописанного алгоритма равна O (1) (что означает, что объем необходимой памяти одинаковый (в основном размер sum
) независимо от n, и погодный результат помещается в sum
).
Обратите внимание, что для одной и той же задачи разные алгоритмы могут иметь разные сложности. Как правильно заметил @AxelKemper в своем комментарии, вы можете выразить решение как один многочлен от n, поэтому наиболее эффективное решение будет иметь сложность O (1). Однако алгоритм выше не работает таким образом и имеет более высокую сложность.
Сложность времени - O (1). Вы можете перевести сумму сумм в один многочлен от n. –
@AxelKemper, это не так, очевидно, не может быть O (1), потому что число итераций не является постоянным. –
Сложность равна числу членов, само треугольное число. https://en.wikipedia.org/wiki/Triangular_number –