#algorithm #if-statement #conditional-statements
#алгоритм #если-заявление #условные утверждения
Вопрос:
Например:
1.
if a==1 process for a if b==1 process for a
if a == 1; process for a else if b == 1; process for b
Какой из них будет быстрее ?
Комментарии:
1. Как вы думаете, какой из них будет быстрее и почему? (Кроме того, если вы хотите сравнить два блока кода, вам действительно следует попытаться сделать их разными только в тех частях, которые вы хотите сравнить.)
2. В первом примере вы имели в виду «если b==1 процесс для b «?
3. Ты не можешь сказать. Скорость будет зависеть от выравнивания кода сборки. В любом случае, оператор === встречается только в Java.
4. Вопросы формы «Какой из них будет быстрее» иногда появляются на SO. Лучший способ ответить на эти вопросы-почти всегда просто попробовать и посмотреть.
Ответ №1:
Они не эквивалентны. Если код неверен, не имеет значения, насколько он быстр.
В первом примере могут выполняться как процессы, так a
и b
(при допущении опечатки в коде), в зависимости от значений a
и b
.
Во втором примере может выполняться не более одного процесса, даже если a
b
оба они равны 1.
Чтобы ответить на вопрос в более общем плане, при условии, что выполнение каждого теста занимает одинаковое время, серия операций, защищенных if
операторами, будет выполняться медленнее, поскольку все тесты будут оцениваться (и, следовательно, все защищенные операции могут быть выполнены). Серия if-else-if
тестов прекратит выполнение, как только будет установлено, что тест верен (и может быть выполнена только одна защищенная операция). Таким образом, if-else-if
всегда будет по крайней мере так же быстро , как эквивалентная серия if
, и, скорее всего, будет быстрее, в зависимости от того, какие условия верны.
Ответ №2:
Во 2, вы определенно сохраняете некоторые вычисления для проверки условий , так как в случае первого if
true
, программе не нужно проверять какие-либо предстоящие else if
условия.
Однако улучшение скорости будет незначительным и незаметным, учитывая, что ваш компьютер выполняет миллиарды вычислений в секунду. Таким образом, экономия нескольких вычислений-ничто по сравнению с тем, что машина делает в секунду.
Это все равно что взять несколько капель из океана и ожидать, что они что-то изменят.
Тем не менее, это может быть тонной помощи при отладке кода позже, потому что теперь вы знаете, что из if
s, если один выполняется, поток не может перейти в любой другой if
s. Это экономит время и ускоряет отладку.