Решение вопроса о том, что считать, состоит из двух шагов:
- выбирается значимая операция или группа операций;
- выбирается какие из этих операций содержатся в теле алгоритма, а какие составляют накладные расходы или уходят на регистрацию и учёт данных.
Значимые операции:
- Сравнение. Все операторы сравнения (C/C++) считаются эквивалентными, и их учитывают в алгоритмах поиска и сортировки.
- a == b
- a != b
- a < b
- a > b
- a <= b
- a >= b
- Арифметические операции (C/C++)
- Аддитивные операции (сложения)
- a + b
- a - b
- a++ (увеличение счетчика)
- a-- (уменьшение счетчика)
- Мультипликативные операции (умножения). Умножения работают дольше чем сложения. Алгоритмы считаются предпочтительнее других, если в них меньше умножений, даже если число сложений при этом пропорционально возрастает.
- a * b
- a / b
- a % b (взятие остатка по модулю)
- Целочисленное умножение или деление на степень двойки образуют специальный случай. Эта операция сводится к сдвигу, а последний по скорости эквивалентен сложению. Однако случаев, где эта разница существенна, совсем немного, поскольку умножение и деление на 2 встречается в первую очередь в алгоритмах типа "разделяй и властвуй", где значимую роль зачастую играют операторы сравнения.
- Логарифмы и тригонометрические функции, образуют еще одну, даже более времяёмкую, чем умножения, группу операций (обычно компьютеры вычисляют их значения с помощью разложения в ряд).
См. также: