2013-11-19 3 views
-6

Интересно, сколько раз будет исполнено 2 части кода. Оба они n раз или один из них n + 1?количество времени выполнения 2 кода будет отличаться?

int sum=0; 
for (int i = 1; i <= n; i++) 
sum = sum + i; 

И

int sum=0; 
for (int i = 1; i <= n; ++i) 
sum = sum + i; 

Есть ли кто-нибудь помочь мне?

EDIT Sınce У меня появилось так много, плохих комментариев. Я решил дать свое настоящее намерение спросить об этом.

int sum = 0; 
for (int i = 1; i <= n; ++i) 
sum = sum + f1(i, n);} 

int f1(int x, int n) { 
int sum = 0; 
for (int i = 1; i <= n; i++) 
sum = sum + i; 
return (x + sum); } 

Точная сложность этого фрагмента кода является O (N * (п + 1)), и я хочу узнать, почему существует (п + 1) вместо о (п * п)

+5

Вы даже не протестировали его? –

+1

Спросите себя, каков ответ, если n равно 1. Btw, вы должны отступать от любых элементов управления 'for' (т. Е.' Sum = ... '). –

+0

@ R.MartinhoFernandes Я протестировал его, и, согласно мне, они будут исполнять одно и то же время. Однако точная сложность для отредактированной версии этого вопроса - O (n * (n + 1)), и мне интересно, где приходит 1. – caesar

ответ

1

Неважно, какой из них вы используете, выход программы будет идентичным; i++ и ++i не являются условиями завершения в цикле for, но являются инструкциями, оцененными в конце каждой итерации.

Обратите внимание, что ++i никогда не будет более медленным, чем i++; так как концептуально для последней нужно взять копию объекта. Однако хороший компилятор оптимизирует копию.

И пункт стиля: пожалуйста, отделите строку sum = sum + i;; это трудно читать иначе.

0

Я думаю, что сложность кода в коде - O (n^2). Не имеет значения, что цикл для n + 1 по сложности. O (n + 1) = O (n-1) = O (n), поэтому все они одинаковы, а сложность можно назвать n^2.

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