Математический вывод сложности O (n ^ 3) для общих трех вложенных циклов

Временная сложность вложенного цикла for входит в математический вывод путем суммирования двух петель O (n2) сложности.

Я попытался выполнить упражнение, чтобы выяснить, как я могу получить O (n3) для следующих примеров трех вложенных циклов.

Простые три вложенных цикла.

   for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
for (int k = 1; k <= n; k++)
print(i * k * j);

Суммирование
= (n + n + n + …. + n) + (n + n + n + … + n) + … + (n + n + n + … + n)

= n ^ 2 + n ^ 2 + …. + n ^ 2

n раз n ^ 2 = O (n ^ 3)

Три вложенных цикла не запускаются n раз с начала

 for(int i = 1; i <= n; i++)
for(int j = i; j <= n; j++)
for(int k = j; k <= n; k++)
print(i *j * k)

Вышеприведенное является довольно распространенной формой вложенных циклов, и я считаю, что суммирование будет выглядеть следующим образом

= (n + (n -1) + (n -2) + (n — 3) + … + 1)
+ ((n -1) + (n — 2) + (n — 3) + … + 1)
+ ((n -2) + (n -3) + (n — 4) + … + 1)
+ …
+ ((n — (n -2)) + 1)

= n (n — 1) / 2 + (n-1) (n -2) / 2 + (n-2) (n-3) / 2 + …. + 1

знак равно
Отсюда я немного не уверен, правильна ли моя логика. я верю
каждое из вышеперечисленных значений оценивается как многочлен, наибольшее значение которого равно n2, и, поскольку это то, что нам важно в сложности времени, вышеприведенное уравнение разбивается на.

= n ^ 2 + n ^ 2 + n ^ 2 + … + n ^ 2

= что n раз n ^ 2 = O (n ^ 3).

Правильно ли мое предположение?

Три вложенных цикла не выполняются n раз от конца

for(int i = 1; i <= n; i++)
for(int j = 1; j <= i; j++)
for(int k = 1; k <= j; k++)
print(i *j * k)

Если бы вышеупомянутое было двумя вложенными циклами, суммирование было бы 1 + 2 + 3 + 4 + … + n. Тем не менее, для трех вложенных случаев я вывел его на

= 1 + (1 + 2) + (1 + 2 + 3) + (1 + 2 + 3) + (1 + 2 + 3 + …. + n)

Отсюда я не уверен, как получить O (n ^ 3) или как дальнейшее упрощение вышеупомянутого суммирования.

-2

Решение

Используя тот факт, что:
1+2+3+...+i =i*(i+1)/2, суммирование выше может быть записано как:
1*(1+1)/2 + 2*(2+1)/2 + ... + n*(n+1)/2,
очевидно i*(i+1) > i^2, следовательно:

1*(1+1)/2 + 2*(2+1)/2 + ... + n*(n+1)/2 > (1^2+...+ n^2)/2, как мы знаем:

1^2+...+n^2 = n^3/3 + n^2/2 + n/6 (можно доказать это по индукции).

Поэтому первоначальная сумма S больше чем:

n^3/6 + n^2/4 + n/12, который O(n^3),

1

Другие решения

Других решений пока нет …