Перво-наперво: нужно ли оптимизировать программу?Вы решили узнать, где вам нужно это сделать?Разве в этой функции?
Для примитивных типов второе сравнение является такой же быстрой операцией, как и получение.Более высокая стоимость сравнения загружает элемент в соответствующий регистр, и это необходимо для первого сравнения.После того, как это сравнение выполнено, значение уже занесено в регистр, и вторая операция требует одной инструкции процессора плюс возможная стоимость ошибочного прогнозирования ветвления.
При условии целочисленных типов стоимость времени работы алгоритма равнаСкорее всего, преобладает стоимость рекурсивных вызовов, если компилятор не может выполнить оптимизацию хвостовой рекурсии.Если вам действительно нужно оптимизировать это, попробуйте скомпилировать все флаги оптимизации и проанализировать ассемблер, чтобы определить, применяется ли оптимизация хвостовой рекурсии.Если нет, то вручную преобразуйте алгоритм из рекурсивного в итеративный.
Это будет иметь два эффекта: затенить код (избегать изменения чистого решения, если вам это действительно не нужно) и избежать вызовов функций.
Если вы говорите о C ++, а тип сложный и перегруженные операторы сравнения стоят дорого, то самым быстрым приростом производительности является реализация метода compare
, который будет возвращать отрицательное число для меньше ,0
для равного и положительного числа, если больше .Затем предварительно сравните результат перед сравнениями, а затем выполните только целочисленные проверки.Это снимет общую стоимость алгоритма с одной обработкой реальных объектов при дорогостоящем сравнении и вернет вас к исходному предположению.