Сложность алгоритма

Сло́жность алгори́тма, числовая характеристика алгоритма, измеряющая либо сложность его описания, либо сложность вычисления с помощью этого алгоритма. Ниже рассматривается только сложность алгоритма вычисления, которая характеризует его эффективность в том или ином смысле. Сложность алгоритма, как правило, является функцией не только самого алгоритма, но и исходных данных (например, слов). Многие варианты сложности алгоритма являются монотонными функциями на множестве натуральных чисел (длин слов). Самым распространённым вариантом сложности алгоритма является сложность алгоритма в наихудшем случае, определяемая как максимальная сложность алгоритма по всем исходным данным, длина которых не превосходит некоторого натурального числа , рассматриваемого как параметр. Обычно ставится вопрос об асимптотическом при поведении сложности алгоритма в наихудшем случае.

Наиболее важным примером сложности алгоритма является время его работы, измеряемое числом элементарных шагов (операций), совершаемых алгоритмом при переходе от исходных данных к результату работы. Алгоритмы, время работы которых в наихудшем случае ограничено некоторым полиномом от длины исходных данных, называются полиномиальными. Расширенный тезис Чёрча утверждает, что все разумные, в широком интуитивном смысле, уточнения понятия алгоритма приводят к одному и тому же классу полиномиальных алгоритмов и что этот класс совпадает с классом алгоритмов, фактически реализуемых на практике. Обе части этого тезиса не являются настолько бесспорными, как изначальный тезис Чёрча (см. в статье Алгоритмическая проблема).

Теория сложности алгоритма как самостоятельная научная дисциплина начала развиваться в 1960-х гг. одновременно с развитием компьютерных технологий. В это время, в частности, сформировались основные концепции теории сложности алгоритма. В начале 1970-х гг. была построена теория переборных задач и сформулирована центральная в этой области проблема перебора (см. Теория алгоритмов). Было также введено важнейшее понятие сводимости, связанное с возможностью из эффективных алгоритмов, построенных для решения одной задачи, получать эффективные алгоритмы для решения других задач.

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

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

Литература

  • Гэри М. Вычислительные машины и труднорешаемые задачи / М. Гэри, Д. Джонсон ; пер. с англ. Е. В. Левнера, М. А. Фрумкина. – Москва : Мир, 1982.
  • Papadimitriou C. H. Computational complexity. – Reading, MA : Addison-Wesley, 1994.
Материалы портала bigenc.ru переданы в ведение АНО «Интернет-энциклопедия «РУВИКИ» на основе лицензионного соглашения. Возможны неточности в отображении материалов. Если у вас возникли вопросы или вы увидели ошибку, пожалуйста, сообщите нам на info@ruwiki.ru