2016-11-08 4 views
1

Почему временная сложностьвремени сложность вложенного цикла

function (n) 
{ 
    //this loop executes n times 

    for(i = 1 ; i <= n ; i + +) 
    //this loop executes j times with j increase by the rate of i 
    for(j = 1 ; j <= n ; j+ = i) 
    print(“*”) ; 

} 

время его работы равно п * (п^1/2) = п^3/2

так, O (n^3/2)

Пожалуйста, объясните с помощью математических шагов.

Заранее спасибо.

ответ

1

Время работы ограничено от O(n^{3/2}), но это не туго!

Обратите внимание, что внутренний цикл составляет O(n/i) итераций для каждого i=1,2,...n), поэтому сложность времени составляет O(n * (1 + 1/2 + 1/3 + ... + 1/n)) = O(n log n).

Это потому, что 1+1/2+1/3+...+1/n=O(log n), так как это известный harmonic series.

+0

Для n = 4 .... для i = 1 внутренний цикл выполняется 5 раз (j = от 1 до 4) для n = 4 ... для (i = 2), он выполняется для j = 1,3 ... 2times и для (i = 3), innerloop выполняется для j = 1,4 .. в два раза .. как j <= n ... Так как же он делает итерации O (n/i)? – Ankita

+0

Поскольку вы увеличиваете 'j' на шаг' i', вы делаете не более итераций 'K', т. Е. Число итераций внутреннего цикла является наибольшим' K', для которого 'K * i blazs