2010-11-28 3 views
5

У меня вопрос о вычислении времени работы Big O для серии циклов, которые вложены во внешний цикл.Big O для вложенных рядов для циклов

Например:

 

for (50,000 times) 
{ 
    for (n times) 
    { 
     //Do something 
    } 
    for (n-2 times) 
    { 
     //Do something 
    } 
    for (n times) 
    { 
     //Do something 
    } 
    for (n-2 times) 
    { 
     //Do something 
    } 
} 
 

Внешний цикл является постоянной, поэтому считаю, что игнорируется. Неужели так легко сделать следующий расчет?

N + N-2 + N + N-2

2N + 2 (Н-2)

4N - 4

O (4N - 4)

O (4N) - после удаления константы -4

Это правильно?

Спасибо.

+6

Я думаю, что это правильно, но у вас есть другая константа для удаления: O (4n) - это просто O (n). – 2010-11-28 00:58:24

ответ

6

Это O (п)

(вы заинтересованы только в том, что это «самый большой» часть уравнения, и вы раздеться константа).

Если у вас цикл я от 1..N и еще один цикл внутри J из i..n, было бы O (N^2).

+0

Спасибо. Я думал, что это может быть так, но это казалось неправильным. Я полагаю, что этот случай с 50 000 итераций показал ограничение Big O, потому что все константы игнорируются. – 2010-11-28 01:18:06

0

Это правильно. Вы просто добавляете четыре петли, которые составляют O(N). Таким образом, это 4O(N), то умножается на 50, 000, который является большим числом, но это не N зависит.

0

Это O (N). Но в этом контексте, в зависимости от того, что у вас есть для N, константа может сильно повлиять на производительность вашего алгоритма.

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