Что подсчитывать и что учитывать при анализе алгоритмов

Решение вопроса о том, что считать, состоит из двух шагов:
  1. выбирается значимая операция или группа операций;
  2. выбирается какие из этих операций содержатся в теле алгоритма, а какие составляют накладные расходы или уходят на регистрацию и учёт данных.

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

См. также: