Цикл while работает быстрее чем цикл for
Перейти к содержимому

Цикл while работает быстрее чем цикл for

  • автор:

Java для цикла против цикла while. Разница в производительности?

Единственное, что может сделать это быстрее, — это иметь меньше вложенных циклов и зацикливаться на меньших значениях.

Единственное различие между циклом for и циклом while — это синтаксис для их определения. Разница в производительности не существует.

(На самом деле for-loop немного лучше, потому что i будет недоступен после цикла, в то время как i останется в цикле while .)

А для цикла является просто синтаксически более красивым способом цикла.

Такая микро-оптимизация бессмысленна.

  • Контур while не будет быстрее.
  • Структура цикла не является вашим узким местом.
  • Сначала оптимизируйте свой алгоритм.
  • Еще лучше, сначала не оптимизируйте. Оптимизируйте только после того, как узнаете, что у вас действительно есть узкое место в вашем алгоритме, который не зависит от ввода/вывода.

вы не можете его оптимизировать, изменив его на время.

вы можете просто увеличить скорость очень очень очень мало, изменив строку

где lengthMinusOne вычисляется до

это вычитание вычисляется почти (200×201/2) x (200-1) раз, и для компьютера очень мало:)

Кто-то предложил протестировать циклы while vs for , поэтому я создал некоторый код для проверки того, были ли циклы или циклы быстрее; в среднем более 100 000 тестов, цикл while был быстрее

95% времени. Возможно, я неправильно его закодировал, но я совсем не привык к кодированию, также учитывая, что, если я запускал всего 10 000 циклов, они оказались довольно даже в режиме запуска.

edit Я не сдвигал все значения массива, когда я пошел на тестирование для большего количества проб. Исправлено так, что вам было легче изменить количество проб, которые вы запускали.

здесь полезная ссылка в статью по этому вопросу

в соответствии с ним, «Вниз» и «В» почти в два раза быстрее, но оба они одинаковы.

НО эта статья была написана в 2009 году, поэтому я попробовал ее на своей машине и вот результаты:

  • с использованием java 1.7: Итератор был примерно на 20% -30% быстрее, чем «И» и «Пока» (которые были все те же)
  • с использованием java 1.6: Iterator был примерно на 5% быстрее, чем For и While (которые были все те же)

поэтому я думаю, что самое лучшее — просто время на вашей собственной версии и машине и сделать вывод из этого

Разница между символами for и while семантической:

  • В цикле while вы будете зацикливаться до тех пор, пока условие будет истинным, что может сильно варьироваться, потому что вы можете в своем цикле модифицировать переменные, используя для определения условия while.
  • Обычно в цикле for вы выполняете цикл N времени. Этот N может быть переменным, но не перемещается до конца вашего цикла N, поскольку обычно разработчики не изменяют переменные, оцененные в состоянии цикла.

Это способ помочь другим понять ваш код. Вы не обязаны изменять переменные цикла, но это обычная (и хорошая) практика.

for или while (Какой цикл "лучше"?)

Что лучше для хранения БД в динамической памяти "Связный список" или же просто в массиве?
Всем доброго времени суток! Получил тему курсовой, попалась тема база данных на файле. Не долго.

Сообщение от freeman27015

значение тоже только не удобно

так же существуют численные массивы которые де заканчиваются детерминированным нулем

Сообщение от breate

Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье"
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из.

Необходимо между каждой парой цифр поставить знак "<", ">" или "="
Дана строка, состоящая из цифр. Необходимо между каждой парой цифр поставить знак &quot;&lt;&quot;, &quot;&gt;&quot; или &quot;=&quot;.

KotazIO

Я расскажу о циклах for и while, операторах break и continue, а также о слове else, которое, будучи употребленное с циклом, может сделать программный код несколько более понятным.

Цикл while

While — один из самых универсальных циклов в Python, поэтому довольно медленный. Выполняет тело цикла до тех пор, пока условие цикла истинно.

Цикл for

Общее понятие

Цикл for уже чуточку сложнее, чуть менее универсальный, но выполняется гораздо быстрее цикла while. Этот цикл проходится по любому итерируемому объекту (например строке или списку), и во время каждого прохода выполняет тело цикла. Цикл for используется в том случае, когда необходимо выполнить некоторую часть кода до тех пор, пока не будет выполнено заданное условие. Цикл for также называют циклом c предусловием. Лучше использовать цикл for, если количество итераций известно заранее.

range()

Мы используем встроенную функцию Python range. Функция range создаст список длинной в «n» элементов. В Python версии 2.Х существует другая функция под названием xrange, которая является генератором чисел и не такая ресурсоемкая, как range. Ранее разработчики сменили xrange на range в Python 3. Вот пример:

Как вы видите, функция range взяла целое число и вернула объект range. Функция range также принимает начальное значение, конечное значение и значение шага. Вот еще два примера:

В пером примере показано, что вы можете передать начальное и конечное значение, и функция range вернет числа, начиная с начального значения вплоть до (но не включая) последнее значение. Например, при запросе 5-10 мы получим 5-9. Во втором примере видно, как использовать функцию списка (list) для того, чтобы функция range вернула каждый второй элемент, между 1 и 10. Так что она начинает с 1, пропускает 2 и так далее. Теперь вы, наверное, гадаете, что же именно она будет делать с циклами? Что-ж, есть один простой способ показать, как работает цикл с использованием функции range! Давайте взглянем:

Что здесь произошло? Давайте почитаем слева на право, чтобы понять это. Для каждого числа в диапазоне 5 мы вводим число. Мы знаем, что если мы вызываем range со значением 5, мы получим список из 5 элементов. Так что каждый раз, проходя через цикл, она выводит каждый из элементов. Цикл for, показанный выше, может быть эквивалентом следующего:

Мы попробуем применить цикл в функции range, но нам нужно вывести только целые числа. Чтобы сделать это, нам нужно использовать условный оператор вместо параметра шага range. Это можно сделать следующим образом:

Вы наверное гадаете, что вообще здесь происходит? Что еще за знак процента? В Python, % называется оператором модуля. Когда вы используете оператор модуля, он возвращает остаток. Когда вы делите целое число на два, вы получаете число без остатка, так что мы выводим эти числа. Вам, возможно, не захочется использовать оператор модуля часто в будущем, но в моей работе он нередко помогает. Теперь мы можем взглянуть на цикл while.

Словари

Функция range лишь делает результат несколько меньшим. Цикл for может обходить любой итератор Python. Мы уже видели, как именно он может работать со списком. Давайте взглянем, может ли он выполнять итерацию со словарем.

Когда вы используете for в словаре, вы увидите, что он автоматически перебирает ключи. Вам не нужно указывать ключ for в a_dict.keys() (впрочем, это также работает). Python делает только нужные нам вещи. Вы возможно думаете, почему ключи выводятся в другом порядке, отличном от того, какой был указан в словаре? Как мы знаем из соответствующей статьи, словари не упорядочены, так что мы можем выполнять итерацию над ними, при этом ключи могут быть в любом порядке. Теперь, зная, что ключи могут быть отсортированы, вы можете отсортировать их до итерации. Давайте немного изменим словарь, чтобы увидеть, как это работает.

Давайте остановимся и разберемся с тем, что делает этот код. Во-первых, мы создали словарь, в котором ключи выступают в качестве целых чисел, вместо строк. Далее, мы извлекли ключи из словаря. Каждый раз, когда вы взываете метод keys(), он возвращает неупорядоченный список ключей. Если вы выведите их, и увидите, что они расположен в порядке по возрастанию, то это просто случайность. Теперь у нас есть доступ к ключам словаря, которые хранятся в переменной, под названием keys. Мы сортируем наш список, после чего используем цикл for в нем. Теперь мы готовы к тому, чтобы сделать все немного интереснее.

Оператор continue

Оператор continue начинает следующий проход цикла, минуя оставшееся тело цикла (for или while)

Оператор break

Оператор break досрочно прерывает цикл.

Волшебное слово else

Слово else, примененное в цикле for или while, проверяет, был ли произведен выход из цикла инструкцией break, или же “естественным” образом. Блок инструкций внутри else выполнится только в том случае, если выход из цикла произошел без помощи break.

Which loop is faster, while or for?

You can get the same output with for and while loops:

While:

For:

But which one is faster?

Mark Lalor's user avatar

16 Answers 16

That clearly depends on the particular implementation of the interpreter/compiler of the specific language.

That said, theoretically, any sane implementation is likely to be able to implement one in terms of the other if it was faster so the difference should be negligible at most.

Of course, I assumed while and for behave as they do in C and similar languages. You could create a language with completely different semantics for while and for

Mehrdad Afshari's user avatar

In C#, the For loop is slightly faster.

For loop average about 2.95 to 3.02 ms.

The While loop averaged about 3.05 to 3.37 ms.

Quick little console app to prove:

Jéf Bueno's user avatar

I find the fastest loop is a reverse while loop, e.g:

Linga's user avatar

As others have said, any compiler worth its salt will generate practically identical code. Any difference in performance is negligible — you are micro-optimizing.

The real question is, what is more readable? And that’s the for loop (at least IMHO).

As for infinite loops for(;;) loop is better than while(1) since while evaluates every time the condition but again it depends on the compiler.

Ilian Zapryanov's user avatar

If that were a C program, I would say neither. The compiler will output exactly the same code. Since it’s not, I say measure it. Really though, it’s not about which loop construct is faster, since that’s a miniscule amount of time savings. It’s about which loop construct is easier to maintain. In the case you showed, a for loop is more appropriate because it’s what other programmers (including future you, hopefully) will expect to see there.

I used a for and while loop on a solid test machine (no non-standard 3rd party background processes running). I ran a for loop vs while loop as it relates to changing the style property of 10,000 <button> nodes.

The test is was run consecutively 10 times, with 1 run timed out for 1500 milliseconds before execution:

Here is the very simple javascript I made for this purpose

Here are the results I got

Update

A separate test I have conducted is located below, which implements 2 differently written factorial algorithms, 1 using a for loop, the other using a while loop.

Here is the code:

And the results for the factorial benchmark:

Conclusion: No matter the sample size or specific task type tested, there is no clear winner in terms of performance between a while and for loop. Testing done on a MacAir with OS X Mavericks on Chrome evergreen.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *