Теория алгоритмов
- 1 year ago
- 0
- 0
Тео́рия алгори́тмов — раздел математики , изучающий общие свойства и закономерности алгоритмов и разнообразные формальные модели их представления. К задачам теории алгоритмов относятся формальное доказательство алгоритмической неразрешимости задач, асимптотический анализ сложности алгоритмов , классификация алгоритмов в соответствии с классами сложности , разработка критериев сравнительной оценки качества алгоритмов и т. п. Вместе с математической логикой теория алгоритмов образует теоретическую основу вычислительных наук , теории передачи информации, информатики , телекоммуникационных систем и других областей науки и техники.
Развитие теории алгоритмов начинается с доказательства Куртом Гёделем теорем о неполноте формальных систем, включающих арифметику, первая из которых была доказана в 1931 году . Возникшее в связи с этими теоремами предположение о невозможности алгоритмического разрешения многих математических проблем (в частности, проблемы выводимости в исчислении предикатов ) вызвало необходимость стандартизации понятия алгоритма. Первые стандартизованные варианты этого понятия были разработаны в 1930-е годы в работах Алана Тьюринга , Эмиля Поста и Алонзо Чёрча . Предложенные ими машина Тьюринга , машина Поста и лямбда-исчисление оказались эквивалентными друг другу. Основываясь на работах Гёделя, Стивен Клини ввёл понятие рекурсивной функции , также оказавшееся эквивалентным вышеперечисленным.
Одним из наиболее удачных стандартизованных вариантов алгоритма является введённое Андреем Марковым понятие нормального алгоритма . Оно было разработано десятью годами позже работ Тьюринга, Поста, Чёрча и Клини в связи с доказательством алгоритмической неразрешимости ряда алгебраических проблем.
В последующие годы значительный вклад в теорию алгоритмов внесли Дональд Кнут , Aльфред Ахо и Джеффри Ульман .
Алан Тьюринг высказал предположение (известное как « тезис Чёрча — Тьюринга »), что любой алгоритм, — в интуитивном смысле слова, — может быть представлен эквивалентной машиной Тьюринга . Уточнение представления о вычислимости на основе понятия такой машины (и других эквивалентных ей понятий) открыло возможность строгого доказательства алгоритмической неразрешимости различных массовых проблем (проблем нахождения единого метода решения некоторого класса задач, условия которых могут варьироваться в известных пределах).
Простейший пример алгоритмически-неразрешимой массовой проблемы — проблема применимости алгоритма, проблема остановки , которая заключается в следующем: требуется найти общий метод, который позволял бы для произвольной машины Тьюринга (заданной посредством своей программы) и произвольного начального состояния ленты этой машины определить — завершится ли работа машины за конечное число шагов, или же будет продолжаться неограниченно долго?
В течение первого десятилетия истории теории алгоритмов, неразрешимые массовые проблемы были обнаружены лишь в ней самой (в том числе, описанная выше «проблема применимости») и в математической логике («проблема выводимости» в классическом исчислении предикатов ). Поэтому считалось, что теория алгоритмов представляет собой «обочину» математики, не имеющую значения для таких её классических разделов, как « алгебра » или « анализ ». Положение изменилось после того, как Андрей Марков и Эмиль Пост в 1947 году установили алгоритмическую неразрешимость известной в алгебре проблемы равенства для конечнопорождённых и конечноопределённых полугрупп ( ). Впоследствии, была установлена алгоритмическая неразрешимость и многих других «чисто математических» массовых проблем, наиболее известным результатом в этой области является доказанная Юрием Матиясевичем алгоритмическая неразрешимость десятой проблемы Гильберта .
Теория алгоритмов развивается, главным образом, по трём направлениям:
Цель анализа — нахождение оптимального алгоритма. Критерий — трудоёмкость (количество необходимых алгоритму элементарных операций). Функция трудоёмкости — соотношение трудоёмкости с входными данными.
На трудоёмкость могут в разной мере влиять свойства входных данных:
Один из упрощённых видов анализа затратности алгоритмов — асимптотический, с большим объёмом входных данных. Используемая оценка функции трудоёмкости — «сложность» алгоритма , позволяющая определить связь трудоёмкости с объёмом данных. В асимптотическом анализе алгоритмов используются обозначения, принятые в математическом асимптотическом анализе. Ниже перечислены основные оценки сложности.
Основной оценкой функции сложности алгоритма (где n — величина объёма данных, «длина входа») является :
если при g > 0 при n > 0 существуют положительные с 1 , с 2 , n 0 , такие, что:
при ; иначе говоря, можно найти такие и , что, — при достаточно больших , — будет заключена между:
В таком случае говорят ещё, что функция является асимптотически точной оценкой функции , так как по определению функция не отличается от функции с точностью до постоянного множителя (см. асимптотическое равенство ). Например, для метода сортировки «heapsort», оценка трудоёмкости составляет:
Из следует .
представляет собой не функцию, а множество функций, описывающих рост с точностью до постоянного множителя. даёт одновременно верхнюю и нижнюю оценки роста функции. Часто бывает необходимо рассматривать эти оценки по отдельности. Оценка представляет собой верхнюю асимптотическую оценку трудоёмкости алгоритма. Мы говорим, что , если:
Иначе говоря, запись означает, что принадлежит классу функций, которые растут не быстрее, чем функция с точностью до постоянного множителя.
Оценка задает нижнюю асимптотическую оценку роста функции и определяет класс функций, которые растут не медленнее, чем с точностью до постоянного множителя. , если:
Например, запись обозначает класс функций, которые растут не медленнее, чем ; в этот класс попадают все полиномы со степенью большей единицы, равно как и все степенные функции с основанием большим единицы.
Равенство выполняется тогда и только тогда, когда и .
Асимптотический анализ алгоритмов имеет не только практическое, но и теоретическое значение. Так, например, доказано, что все алгоритмы сортировки, основанные на попарном сравнении элементов, отсортируют n элементов за время, не меньшее .
Важную роль в развитии асимптотического анализа алгоритмов сыграли Aльфред Ахо , Джеффри Ульман , Джон Хопкрофт .
В рамках классической теории, осуществляется классификация задач по их сложности ( P-сложные , NP-сложные , экспоненциально сложные и другие):
Класс «P» содержится в «NP». Классическим примером NP-задачи является « Задача о коммивояжёре ».
Поскольку «P» содержится в «NP», принадлежность той или иной задачи к классу «NP» зачастую отражает наше текущее представление о способах решения данной задачи и носит неокончательный характер. В общем случае нет оснований полагать, что для той или иной NP-задачи не может быть найдено P-решение. Вопрос о возможной эквивалентности классов «P» и «NP» (о возможности нахождения P-решения для любой NP-задачи) считается одним из основных в современной теории сложности алгоритмов; ответ на него не найден до сих пор. Сама его постановка возможна благодаря введению понятия NP-полных задач ; любые NP-задачи могут быть к ним сведены — и если для NP-полной задачи будет найдено P-решение, то P-решение будет найдено для всех NP-задач. Примером NP-полной задачи является « Задача о конъюнктивной форме ».
Исследования сложности алгоритмов позволили по-новому взглянуть на решение многих классических математических задач и найти для некоторого их ряда (умножение многочленов и матриц, решение линейных систем уравнений и другие) решения, требующие меньше ресурсов, нежели традиционные.
Некоторые приложения теории алгоритмов: