El comentario de Emil Jerabek es un buen resumen, pero quería señalar que hay otras clases con definiciones más claras que capturan más o menos el mismo concepto, y aclarar la relación entre todas estas cosas.
[Advertencia: aunque creo que he entendido bien las definiciones, algunas de las siguientes cosas reflejan mis preferencias personales: he tratado de aclarar dónde estaba eso].
En el mundo determinista, una clase de función es solo una colección de funciones (en el sentido matemático habitual de la palabra "función", es decir, un mapa ). Ocasionalmente queremos permitir "funciones parciales", cuya salida es "indefinida" para ciertas entradas. (De manera equivalente, funciones que se definen en un subconjunto de Σ ∗ en lugar de todo).Σ∗→Σ∗Σ∗
Desafortunadamente, hay dos definiciones diferentes para flotando, y por lo que puedo decir, no son equivalentes (aunque son equivalentes "moralmente").FP
- (definición 1) es la clase de funciones que se pueden calcular en tiempo polinómico. Siempre que veas F P y no está en un contexto en el que la gente habla de F N P , T F N P , esta es la definición que supongo.FPFPFNP,TFNP
En el mundo no determinista, las cosas se ponen un poco divertidas. Allí, es conveniente permitir "funciones parciales y de valores múltiples". Sería natural llamar a tal cosa una relación binaria , es decir, un subconjunto de . Pero desde el punto de vista de la complejidad, a menudo es filosófica y mentalmente útil pensar en estas cosas como "funciones no deterministas". Creo que muchas de estas definiciones se aclaran mediante las siguientes clases (cuyas definiciones están completamente estandarizadas, si no muy conocidas):Σ∗×Σ∗
: La clase de "funciones parciales, de valores múltiples" computables por una máquina no determinista en tiempo polinomial. Lo que esto significa es que hay una máquina no determinista poli-tiempo, y en la entrada x , en cada rama no determinista, puede elegir aceptar y realizar alguna salida, o rechazar y no hacer ninguna salida. La salida "multivalor" en la entrada x es el conjunto de todas las salidas en todas las ramas no deterministas cuando se da x como entrada. Tenga en cuenta que este conjunto puede estar vacío, por lo que, como una "función de valores múltiples", esto solo puede ser parcial. Si pensamos en términos de relaciones binarias, esto corresponde a la relación { ( x , y ) : yNPMVxxx .{(x,y):y is output by some branch of the computation on input x}
: Total de "funciones" en N P M V , es decir, en cada entradax, al menos una rama acepta (y, por lo tanto, hace una salida, por definición)NPMVtNPMVx
: valorados-Single (potencialmente parciales) funciones en N P M V . Sin embargo, hay cierta flexibilidad aquí, ya que varias ramas pueden aceptar, pero si alguna rama acepta, se debe garantizar que todas las ramas aceptadasproduzcanelmismoresultado (de modo que realmente tenga un solo valor). Sin embargo, todavía es posible que ninguna rama acepte, por lo que la función es solo una "función parcial" (es decir, no está definida en todo Σ ∗ ).NPSVNPMVΣ∗
: Single-valorado funciones totales en N P S V . Estas realmente son funciones, en el sentido usual de la palabra, Σ ∗ → Σ ∗ . Es un ejercicio no demasiado difícil ver que N P S V t = F P N P ∩ c o N P (usando Def 1 para FP arriba).NPSVtNPSVΣ∗→Σ∗NPSVt=FPNP∩coNP
N P S V N P M V ⊆ c f g x g f f g N P M V N P S V N P M V ⊆ c N P S VNPMV⊈NPSVNPSVNPMV⊆cfgxgffsiempre son un subconjunto de las salidas de . La pregunta correcta es, entonces, si todos los "función" tiene un refinamiento. Si es así, escribimos .gNPMVNPSVNPMV⊆cNPSV
- PF (un poco menos estándar) es la clase de funciones (potencialmente parciales) computables en poli-tiempo. Es decir, una función ( ) está en si hay una máquina determinista de poli-tiempo tal que, en las entradas la las salidas de la máquina , y en las entradas la máquina no emite ninguna salida (/ rechaza / dice "no" / como quiera expresarlo).f:D→Σ∗D⊆Σ∗PFx∈Df(x)x∉D
FNP es una clase de "problemas de función" (en lugar de una clase de funciones). También llamaría a una "clase relacional", pero realmente cualquier palabra que uses para describirla necesitas aclararte después, por lo que no estoy particularmente interesado en esta definición. Para cualquier relación binaria hay un "problema de función" asociado. ¿Qué es un problema de función? No tengo una definición matemática clara como la tengo para lenguaje / función / relación; más bien, se define por lo que es una solución válida: una solución válida para el problema de la función asociada a es cualquier función (potencialmente parcial) tal que siFNPR⊆Σ∗×Σ∗Rf(∃y)[R(x,y)]f emite cualquier , y de lo contrario no emite ninguna salida. es la clase de problemas de función asociados a las relaciones manera que (cuando se considera como un lenguaje de pares) y está equilibrado en p. Entonces no es una clase de funciones, ni una clase de lenguajes, sino una clase de "problemas de función", donde "problema" aquí se define más o menos en términos de lo que significa resolverlo.yfFNPRR∈PFNP
TFNP es entonces la clase de problemas de función en - definida por una relación como arriba - tal es total, en el sentido de que para cada existe un tal que .FNPRRxyR(x,y)
Para no tener que escribir cosas como "Si cada problema de función (resp., ) tiene una solución en (resp., según lo anterior definición), entonces ... "en este contexto uno usa la Definición 2 de , que es:FNPTFNPPFFPFP
- FP (definición 2) es la clase de problemas de función en que tienen una solución de poli-tiempo. Se puede suponer que la solución (= función) aquí es total eligiendo una cadena especial que no es válida para ninguna , y teniendo la función salida cuando de otro modo no sería válida . (Si es necesario, podemos modificar la relación al anteponer cada con un 1, y luego tomar como la cadena 0; esto no cambia la complejidad de nada involucrado).FNPy0yxy0yRyy0
Así es como estas diversas definiciones se relacionan entre sí, (definición 2, que es lo que debe asumir porque está en un contexto donde se compara con ) es equivalente a . (def 2) es equivalente a (def 1).FNP⊆FPFNPNPMV⊆cPFTFNP⊆FPNPMVt⊆cFP