2016-11-14 3 views
-2

Извините, если этот вопрос является дубликатом, или вроде глупо, но я действительно новый алгоритму развития) Можете ли вы объяснить мне, что сложность следующего фрагмента кодаВременная сложность кода

for (int i=0; i<n; i++) { 
    for (int j=0; j<i; j++) { 
     do stuff... 
    } 
} 

является сложность этого кода n^2 или nlogn? Thanks

+3

Возможный дубликат [Что такое Big-O вложенного цикла, где число итераций во внутреннем цикле определяется текущей итерацией внешнего цикла?] (Http://stackoverflow.com/questions/362059/what-is-the-big-o-of-a-nested-loop-where-number-of-iterations-in-the-inner-loop) – Liam

+2

Пожалуйста, прекратите создавать собственный код. Мне пришлось отбросить это назад 3 раза сейчас – Liam

ответ

1

Сложность O(n^2).

Для первой итерации внешнего цикла, внутренний цикл будет повторять 0 раз

Для второй итерации внешнего цикла, внутренний цикл будет повторять 1 раз.

Для третьей итерации внешней петли внутренний цикл будет итерировать 2 раз.

.........

Для n-й итерации внешнего цикла, внутренний цикл будет повторять n - 1 раз.

Общее число итераций = 0 + 1 + 2 + 3 + 4 ...... + (n - 1)

Мы знаем, сумма арифметических рядов

1 + 2 + 3 + ..... + (n - 2) + (n - 1) + n = (n * (n + 1))/2 

Так,

0 + 1 + 2 + 3 + 4 ...... + (n - 1) 
= (n * (n - 1))/2 
~ n^2 

Рассматривая do stuff фаза будет выполняться в постоянном времени, общее временная сложность O(n^2).

+0

Почему вы делите на 2? – Adjit

+0

проверить обновление –

Смежные вопросы