Скорость роста алгоритма

Точное значение количества операций, выполненных алгоритмом, не играет существенной роли в его анализе, т.к. не является качественным показателем эффективности алгоритма. Более важной оказывается скорость роста этого числа при возрастании объема входных данных. Она называется скоростью роста алгоритма. Именно эта характеристика часто и фигурирует как оценка вычислительной сложности алгоритма.

Существенным является общий характер поведения алгоритмов, а не подробности этого поведения. Предположим, что количество операций четырех различных алгоритмов определяется в соответствии с функциями

скорость роста алгоритма - student2.ru

где – скорость роста алгоритма - student2.ru длина массива входных данных.

Если рассмотреть графики этих функций (рис.1)

скорость роста алгоритма - student2.ru

Рис. 1

например, на промежутке от 1 до 35, то становится очевидным, что несмотря на то, что функция скорость роста алгоритма - student2.ru сначала растет медленнее всех рассматриваемых функций, при росте аргумента она увеличивает скорость возрастания быстрее всех остальных, что приводит к тому, что, начиная с некоторого значения аргумента скорость роста алгоритма - student2.ru , ее значения (а значит количество операций и время выполнения соответствующего алгоритма) становятся значительно больше значений всех остальных рассматриваемых функций.

Таким образом, при анализе алгоритмов существенным является поведении функции зависимости количества операций от размера входных данных скорость роста алгоритма - student2.ru при больших значениях аргумента.

Некоторые часто встречающиеся функции приведены в таблице 1. Очевидно, что при небольших размерах входных данных значения функций отличаются незначительно, при росте этих размеров разница существенно возрастает. Поэтому существенным является поведение функции на больших объемах входных данных, поскольку на малых объемах принципиальная разница оказывается скрытой.

Таблица 1 -

скорость роста алгоритма - student2.ru скорость роста алгоритма - student2.ru скорость роста алгоритма - student2.ru скорость роста алгоритма - student2.ru скорость роста алгоритма - student2.ru
0.0 1.0 2.3 3.3 3.9 4.3 4.9 5.3 5.6 5.9 6.1 6.3 6.5 6.6


Для иллюстрации последующего вывода рассмотрим пример функции, которая трактуется как закон зависимости количества арифметических операций некоторого гипотетического алгоритма от размера входных данных скорость роста алгоритма - student2.ru :

скорость роста алгоритма - student2.ru .

Предложенная функция является суммой нескольких функций, скорость возрастания которых различна. Очевидно, что скорость роста всей скорость роста алгоритма - student2.ru будет определяться самым быстровозрастающим слагаемым - скорость роста алгоритма - student2.ru . Иначе говоря, быстрорастущие функции доминируют функции с более медленным ростом, что приводит к тому, что если сложность алгоритма представляет собой сумму двух или нескольких функций, то для оценки алгоритма целесообразно отбрасывать все функции, кроме тех, которые растут быстрее всех.

Определение. Говорят, что функции скорость роста алгоритма - student2.ru и скорость роста алгоритма - student2.ru связаны соотношением (или сравнимы)

скорость роста алгоритма - student2.ru

(читается: функция скорость роста алгоритма - student2.ru есть О-большое от скорость роста алгоритма - student2.ru ), если

скорость роста алгоритма - student2.ru .

Рассмотрим другой пример:

скорость роста алгоритма - student2.ru .

Ясно, что скорость возрастания скорость роста алгоритма - student2.ru будет определяться первым слагаемым - скорость роста алгоритма - student2.ru , остальными слагаемыми при оценке скорости роста можно пренебречь. Кроме того:

скорость роста алгоритма - student2.ru ,

Из чего вытекает, что

скорость роста алгоритма - student2.ru .

Отбрасывая все младшие члены, скорость роста которых меньше, получаем порядок вычислительной сложности алгоритма. В предыдущем рассмотренном примере поскольку скорость роста алгоритма - student2.ru , то соответствующий гипотетический алгоритм имеет вычислительную сложность порядка скорость роста алгоритма - student2.ru .

Вопросы

  1. Какие основные характеристики алгоритма оцениваются при его анализе?
  2. Как целесообразно оценивать «время» выполнения алгоритма? Почему? Что такое вычислительная сложность алгоритма?
  3. В каких случаях сравнивается эффективность работы разных алгоритмов?
  4. Должен ли анализ алгоритма учитывать особенности компьютера, на котором этот алгоритм реализован? Почему?
  5. Влияют ли входные данные задачи на последовательность действий алгоритма? Привести пример.
  6. Что представляют из себя классы входных данных?
  7. Насколько значимым в настоящее время является вопрос используемой алгоритмом памяти?
  8. Какие предварительные шаги предпринимаются для оценки вычислительной сложности алгоритма?
  9. На какие две группы разбиваются арифметические операции? Почему?
  10. Какие наборы данных желательно найти при оценке вычислительной сложности алгоритма?
  11. Что называется скоростью роста алгоритма?
  12. Что такое порядок вычислительной сложности алгоритма? Как он оценивается?

Наши рекомендации