Анализ алгоритмов

При анализе алгоритмов мы должны обращать внимания на многие вещи: простота реализации, безопастность, возможность переиспользования и т.д. Однако основным аспектом любого алгоритма является затраченные на его выполнения ресурсы к которым относятся время и память.

Анализировать затраченное на выполнение алгоритма время можно двумя принципиально различными способами: экспериментально и теоретически.

Эксперементальный анализ

Для того, чтобы получить эксперементальную оценку времени выполнения нам необходимо выполнить следущие шаги:

  1. Реализовать алгоритм на одном из языков программирования;
  2. Запустить программу на различных входных данных (варьируя размер входных данных);
  3. Используя такой класс, как Stopwatch (System.currentTimeMillis), замерить фактическое время работы алгоритма;
  4. Опционально, изобразить полученный набор данных (см. рисунок)

Такой подход измерения времени работы алгоритма имеет ряд недостатков:

  1. Необходимо реализовать и протестировать алгоритм для того, чтобы определить время его работы;

  2. Эксперименты можно сделать только на ограниченном наборе входных данных, то есть они могут не точно говорить о времени работы алгоритма на других входных данных которые не включенны в эксперимент;

  3. Время работы алгоритмов может зависить от компьютера на котором они выполняются, то есть для того, чтобы сравнить два алгоритма, необходимо использовать одинаковые аппаратные и программные среды.

Для решения недостатков эксперементального анализа был разработан теоретический анализ.

Теоретический анализ

В отличии от эксперементального, теоретический анализ:

  1. Использует высокоуровневое описания алгоритма вместо его реализации;
  2. Характеризует время работы агоритма как функцию зависящую от размера входных данных $$n$$;
  3. Принимает во внимание все возможные входные данные;
  4. Позволяет оценить скорость работы алгоритма вне зависимости от программного и аппаратного обеспечения.

results matching ""

    No results matching ""