2015-10-05 3 views
3

Меня спрашивают определить большую нотацию O для этого цикла.Определение большой (O) эффективности конкретной петли

int x = 1; 
    int n = 1000; 
    while (x < (n*n)) 
    { 
     int y = n; 
     while (y > 0) 
     { 
      y = y-1; 
     } 
     x = x+x; 
    } 

Теперь я вижу, что это вложенный цикл. Но это определенно не N^2, правильно? Я понимаю, что делает что-то O (n) или O (log (n)), но как я буду определять определение для определенного цикла, такого как этот?

+0

сложность 'O (n^3)' – mangusta

+2

как вы достигли этого? @mangusta – Andy

+0

лучше обратиться к учебнику алгоритмов, всегда есть раздел в начале с подробным объяснением на основе примера – mangusta

ответ

4

Внутренний цикл проходит от п к , так что О (п).

Внешний контур

while (x < (n*n)) { 
    ... 
    x = 2*x; 
} 

логарифмическая, работает с к N * N, который был бы O (журнал (п)) = O (2 лог-н) = O (log n).

Поскольку петли вложенными, вы умножаете сложности получить O (п § п).

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