Чтобы вычислить сложность времени, вы можете попытаться оценить количество итераций самой внутренней l oop.
- l oop в
k
вычисляет простое выражение 2 * j
раз. - l oop на
j
работает n
раз. Следовательно, внутренний l oop работает 2 * n * (n + 1) / 2
, что упрощается до n * (n + 1)
. - , внешний l oop выполняется
n * n
раз. Следовательно, внутренние циклы выполняются ровно n * n * n * (n + 1)
раз.
Упрощение для доминирующего члена приводит к сложности времени: n 4 .
Все же очень проницательный компилятор уменьшил бы эту сложность до постоянного времени O (1) и сгенерировал бы код для:
return n * n * n * (n + 1);
Попытка сделать это на Исследователь компилятора Годболта показывает, что ни один из распространенных компиляторов не достигает этого на данный момент, хотя clang делает все возможное, чтобы оптимизировать код с помощью непостижимого кода SIMD.