2017-02-01 4 views
-5
int i; 
    for(i=0;i<n;i++) 
    { 
    if(i==number); 
     break; 
    } 

ИЛИКакой цикл «для» имеет лучшую временную сложность?

for(i=0; ;i++) 
    { 
    if(i==number) 
    break; 
    } 

ли удаление сравнительной части в течение цикла эффектов временной сложности или нет?

+1

Первый - это 'O (n)'. Второй - «O (max (число))». –

+0

он завершится, когда i == number, так как есть оператор break. И это фактически для массива, который будет иметь в нем «число». –

+0

Спасибо, Евгений Ш., не могли бы вы объяснить, как? –

ответ

1

Вы не можете сказать, что быстрее точно ...

Временная сложность для первого является O(min(n, number)) и второй O(number).


Если n больше (или равно), чем число, первое будет равно второму.

  • первый: O(number) (как число меньше, чем п, min(n, number) = number
  • второй: O(number)

, если п меньше, чем число, первый будет быстрее (поскольку она также останавливается в n).

  • первая: O(n) (поскольку n меньше, чем n умбра, min(n, number) = n
  • второй: O(number)

в общей точки зрения, первый будет быстрее.

Как вы можете видеть, удаление сравнения внутри внешнего вида делает разницу, что совершенно очевидно, учитывая второй случай, когда их сложности становятся разными.

+0

Спасибо Даниэлю, будет и время одинаковым для обоих циклы? Или какая-то разница? –

+0

, как я объяснил, время будет отличаться, если число больше n, иначе сложность времени одинакова – Daniel