Комментарий Эмиля Джерабека - хорошее резюме, но я хотел бы отметить, что существуют другие классы с более четкими определениями, которые более или менее отражают ту же концепцию, и прояснить связь между всеми этими вещами.
[Предупреждение: хотя я считаю, что я правильно понял определения, некоторые из приведенных ниже вещей отражают мои личные предпочтения - я пытался уточнить, где это было.]
В детерминированном мире класс функций - это просто набор функций (в обычном математическом смысле слова «функция», то есть отображение ). Иногда мы хотим разрешить «частичные функции», чей вывод «неопределен» для определенных входных данных. (Эквивалентно, функции, которые определены на подмножестве Σ ∗, а не на всех.)Σ∗→Σ∗Σ∗
К сожалению, существует два разных определения , и, насколько я могу судить, они не эквивалентны (хотя они «морально» эквивалентны).FP
- (определение 1) - это класс функций, которые могут быть вычислены за полиномиальное время. Всякий раз, когда вы видите F P, а это не в контексте, когда люди говорят о F N P , T F N P , это определение, которое я предполагаю.FPFPFNP,TFNP
В недетерминированном мире все становится немного смешно. Там удобно разрешать «частичные, многозначные функции». Естественно было бы также назвать такую вещь бинарным отношением , то есть подмножеством . Но с точки зрения сложности часто философски и умственно полезно думать об этих вещах как о «недетерминированных функциях». Я думаю, что многие из этих определений разъясняются следующими классами (чьи определения полностью стандартизированы, если не очень хорошо известны):Σ∗×Σ∗
: класс «частичных многозначных функций», вычисляемых недетерминированной машиной за полиномиальное время. Это означает, что есть недетерминированная машина с многократным использованием времени, и на входе x в каждой недетерминированной ветви она может принять решение принять и сделать некоторый вывод, либо отклонить и не делать вывод. «Многозначный» выходной сигнал на входе x представляет собой набор всех выходных данных на всех недетерминированных ветвях, если вкачестве входных данныхуказан x . Обратите внимание, что этот набор может быть пустым, поэтому как «многозначная функция» он может быть только частичным. Если мы думаем об этом в терминах бинарных отношений, это соответствует отношению { ( x , y ) : yNPMVxxx .{(x,y):y is output by some branch of the computation on input x}
: Общее количество «функций» в N P M V , то есть на каждом входеxпринимает по крайней мере одна ветвь (и, следовательно, делает вывод по определению)NPMVtNPMVx
: однозначная (потенциально) частичные функции в N P M V . Однако здесь есть некоторая гибкость, заключающаяся втом, что несколько ветвей могут принять, но если любая ветка принимает, то все принимающие ветви должны быть гарантированно сделать один и тотжевывод (так, чтобы это действительно было однозначным). Тем не менее, все еще возможно, что ни одна ветвь не принимает, поэтому функция является только «частичной функцией» (т.е. не определена на всех из Σ ∗ ).NPSVNPMVΣ∗
: Однозначная общие функции в N P S V . Это действительно функции в обычном смысле слова Σ ∗ → Σ ∗ . Это не слишком сложное упражнение, чтобы увидеть, что N P S V t = F P N P ∩ c o N P (используя Def 1 для FP выше).NPSVtNPSVΣ∗→Σ∗NPSVt=FPNP∩coNP
NPMV⊈NPSVNPSVNPMV⊆cfgxgffвсегда являются подмножеством выходов . Тогда правильный вопрос заключается в том, имеет ли каждая «функция» функцию . Если это так, мы пишем .gNPMVNPSVNPMV⊆cNPSV
- PF (чуть менее стандартный) - это класс (потенциально частичных) функций, вычислимых в поли-времени. То есть, функция ( ) находится в , если есть поли-времени детерминированной машины таким образом , что на входах машина выводит , а на входы машина не выводит (/ отклоняет / говорит «нет» / как бы вы ни хотели это ).f:D→Σ∗D⊆Σ∗PFx∈Df(x)x∉D
FNP - это класс «функциональных проблем» (а не класс функций). Я бы также назвал «реляционным классом», но на самом деле, какие бы слова вы ни использовали для его описания, вам нужно прояснить себя позже, поэтому я не особенно неравнодушен к этому определению. С любым бинарным отношением связана «функциональная проблема». Что такое функциональная проблема? У меня нет четкого математического определения, как у языка / функции / отношения; скорее, оно определяется тем, что является допустимым решением: допустимым решением проблемы функции, связанной с является любая (потенциально частичная) функция такая, что еслиFNPR⊆Σ∗×Σ∗Rf(∃y)[R(x,y)]f выводит любой такой , а в противном случае не выводит. - это класс функциональных задач, связанных с отношениями такой, что (если рассматривать его как язык пар) и является p-сбалансированным. Таким образом, - это не класс функций и не класс языков, а класс «функциональных проблем», где «проблема» здесь определяется примерно с точки зрения того, что означает ее решение.yfFNPRR∈PFNP
TFNPТогда является классом функциональных задач в - определяемым соотношением как указано выше - такой тотален, в том смысле, что для каждого существует такой , что .FNPRRxyR(x,y)
Чтобы не приходилось писать такие вещи, как «Если каждая функция (соответственно, )» имеет решение в (соответственно, согласно вышеописанному определение), затем ... "в этом контексте используется определение 2 из , а именно:FNPTFNPPFFPFP
- FP (определение 2) - это класс функциональных задач в которые имеют решение по времени. Можно предположить, что решение (= функция) здесь является полным, выбрав специальную строку которая не является допустимой для любого , и имея функцию, когда в противном случае не было бы допустимого . (При необходимости мы можем изменить отношение , добавляя перед каждым 1, а затем принимать в качестве строки 0; это не меняет сложности чего-либо вовлеченного).FNPy0yxy0yRyy0
Вот как эти различные определения связаны друг с другом, (определение 2, что вы и должны предполагать, поскольку оно находится в контексте, где его сравнивают с ), эквивалентно to . (def 2) эквивалентно (def 1).FNP⊆FPFNPNPMV⊆cPFTFNP⊆FPNPMVt⊆cFP