Два цикла больше, чем больший? - PullRequest
0 голосов
/ 10 апреля 2020

Какой фрагмент кода быстрее

Номер 1:

for(var i = 0; i<50; i++){
    //run code in here
}
for(var i = 0; i<50; i++){
    //run more code in here
}

Или номер 2:

for(var i = 0; i<100; i++){
    //run all the code in here
}

Спасибо!

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Как уже указывалось в другом ответе, оба цикла дают одинаковое поведение масштабирования O ( N ) (для всего, что происходит в теле l oop, а также для масштабирования длин l oop 50 и 100, соответственно. Точка обычно является коэффициентом пропорциональности, который сопровождает энергетический термин (c . X N ) .

На многих (большинстве) реальных системах ЦП, используемых для вычислений, важных для производительности, обычно есть кеши и конвейеры для данных, которыми манипулируют внутри циклов. Затем ответ на вопрос зависит от деталей вашего л oop тел (будут ли все данные, считанные / записанные в циклах, помещаться в некоторый уровень кэша, или второй 50-l oop пропустит все существующие значения кэша и снова извлечет данные из памяти?). Кроме того, предположение предсказание ветвления (для ветви выхода / повтора l oop, а также для ветвей l oop) оказывает сложное влияние на фактическую производительность.

Это собственный раздел вычислений Наука, чтобы точно учесть все соответствующие детали. Нужно проанализировать конкретный пример (что на самом деле делают циклы?) - и прежде, действительно ли этот l oop актуален .

Некоторые heuristi c могут, тем не менее, быть полезными : Если i является итератором (а не только счетчиком повторений), два цикла 1..50 могут работать с одними и теми же данными. Если возможно обработать каждый элемент обоими телами l oop (что работает, только если нет никаких зависимостей между вторым l oop и состоянием других элементов после первого l oop), обычно это больше Эффективно обрабатывать каждый индекс только один раз.

1 голос
/ 10 апреля 2020

Это будет зависеть от логики c внутри них (вложенные циклы и т. Д. c). Теоретически, они будут работать одинаково, так как они оба линейны. (Обе - 100 итераций). Таким образом, Большая O Временная Сложность равна O (N), где N - это размер l oop.

Big O Временная Сложность

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...