В теории вычислительной сложности функциональная задача — это вычислительная задача , в которой для каждого входного сигнала ожидается один выходной результат (полной функции ), но выходной результат более сложен, чем у задачи решения . В случае функциональных проблем выходными данными являются не просто «да» или «нет».
Функциональная задача определяется отношением над строками произвольного алфавита :
Алгоритм решает, если для каждого входного сигнала , для которого существует удовлетворяющее , алгоритм выдает одно такое , а если таких нет , он отклоняет.
Задаче функции обещания разрешено делать что угодно (поэтому она не может завершиться), если таковой не существует.
Хорошо известная функциональная проблема представляет собой Функциональную Булеву задачу выполнимости, сокращенно FSAT . Проблему, тесно связанную с проблемой решения SAT , можно сформулировать следующим образом:
В этом случае отношение задается кортежами соответствующим образом закодированных логических формул и удовлетворяющих присваиваний. В то время как алгоритму SAT, насыщенному формулой , необходимо возвращать только «невыполнимо» или «выполнимо», в последнем случае алгоритму FSAT необходимо возвращать некоторое удовлетворяющее задание.
Другие известные примеры включают задачу коммивояжера , в которой запрашивается маршрут, пройденный продавцом, и задачу факторизации целых чисел , в которой запрашивается список факторов.
Рассмотрим произвольную задачу решения в классе NP . По определению NP , каждый экземпляр задачи , на который получен ответ «да», имеет сертификат полиномиального размера , который служит доказательством ответа «да». Таким образом, набор этих кортежей образует отношение, представляющее задачу функции «данная в , найти сертификат для ». Эта функциональная задача называется вариантом функции ; он принадлежит к классу FNP .
FNP можно рассматривать как аналог NP функционального класса , в котором решения проблем FNP могут быть эффективно (т. е. за полиномиальное время с точки зрения длины входных данных) проверены , но не обязательно эффективно найдены . Напротив, класс FP , который можно рассматривать как аналог функционального класса P , состоит из функциональных задач, решения которых можно найти за полиномиальное время.
Обратите внимание, что проблема FSAT, представленная выше, может быть решена с использованием только полиномиального числа вызовов подпрограммы, которая решает проблему SAT : алгоритм может сначала спросить, выполнима ли формула. После этого алгоритм может присвоить переменной значение TRUE и запросить еще раз. Если результирующая формула по-прежнему выполнима, алгоритм сохраняет значение TRUE и продолжает фиксировать , в противном случае он решает, что это значение должно быть FALSE, и продолжает работу. Таким образом, FSAT разрешима за полиномиальное время с использованием оракула, решающего SAT . В общем, проблема в NP называется самоприводимой, если ее функциональный вариант может быть решен за полиномиальное время с помощью оракула, решающего исходную задачу. Любая NP-полная задача саморедуцируема. Предполагается [ кем? ] что проблема целочисленной факторизации не является самосократимой, поскольку решение о том, является ли целое число простым, находится в P (легко), [1] в то время как задача целочисленной факторизации считается сложной для классического компьютера. Существует несколько (немного отличающихся) понятий самосократимости. [2] [3] [4]
Функциональные проблемы могут быть сведены во многом так же, как и проблемы решения: если заданы функциональные проблемы , и мы говорим, что это сводится к тому , если существуют функции, вычислимые полиномиально за время и такие, что для всех экземпляров и возможных решений , это справедливо, что
Следовательно, можно определить FNP-полные задачи, аналогичные NP-полной задаче:
Задача называется FNP-полной, если любую задачу из FNP можно свести к . Класс сложности FNP-полных задач обозначается FNP-C или FNPC . Следовательно, проблема FSAT также является FNP-полной проблемой, и она выполняется тогда и только тогда, когда .
Отношение, используемое для определения функциональных задач, имеет тот недостаток, что оно является неполным: не у каждого входа есть такой аналог , что . Поэтому вопрос о вычислимости доказательств не отделен от вопроса об их существовании. Чтобы преодолеть эту проблему, удобно рассмотреть ограничение функциональных задач на полные отношения, в результате чего класс TFNP становится подклассом FNP . Этот класс содержит такие задачи, как вычисление чистого равновесия Нэша в некоторых стратегических играх, где гарантированно существует решение. Кроме того, если TFNP содержит какую-либо FNP-полную задачу, из этого следует, что .