Наибыстрейший способ проверки числа на чётность
При решении алгоритмических задач на LeetCode, часто возникает потребность в микрооптимизациях. Я понимаю, что с точки зрения читаемости кода наилучший способ для определении чётности это проверка остатка от деления:
if(n%2==0){ }
Но с точки зрения скорости выполнения, разве логическое умножение не будет быстрее?
if(n&1==0){ }
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Посмотрим, что сделает компилятор из этого кода: ассемблер справа.
Получается, что для обоих случаев сгенерируется одно и то же:
test al, 1
jne SHORT G_M29322_IG05
В любом случае, такие микрооптимизации стоит оставлять на самый конец.
При решении задач на leetcode и подобных стоит обдумать по очереди:
- алгоритм, обеспечивающий наилучшую сложность - как вычислительную, так и по памяти
- наиболее оптимальные структуры данных
- минимизировать операции выделения памяти, если объём данных велик
- применять функции из системных библиотек вместо ручной реализации - они могут дать существенный выигрыш, например, в Python (поскольку реализованы на C)
- тут уже можно на уровне отдельных операторов вылавливать проценты производительности