En su libro Computational Complexity , Papadimitriou define FNP de la siguiente manera:
Supongamos que es un lenguaje en NP . Por la proposición 9.1, hay una decidable de tiempo polinómico, polinomialmente equilibrada relación R L tal que para todas las cadenas de x : No es una cadena y con R L ( x , y ) si y sólo si x ∈ L . El problema de función asociado con L , denotado F L , es el siguiente problema computacional:
Dado , encuentre una cadena y tal que R L ( x , y ) si tal cadena existe; si no existe tal cadena, devuelva "no".
La clase de todos los problemas de función asociados anteriormente con el lenguaje en NP se llama FNP . FP es la subclase resultante si solo consideramos problemas de función en FNP que pueden resolverse en tiempo polinómico.
(...)
(...), llamamos a un problema en total FNP si para cada cadena x hay al menos un y tal que R ( x , y ) . La subclase de FNP que contiene todos los problemas de función total se denota TFNP .
En un diagrama de Venn en la descripción general del capítulo, Papadimitriou implica que FP TFNP ⊆ FNP .
Me cuesta entender por qué exactamente sostiene que FP TFNP ya que los problemas en FP no tienen que ser totales per se.
Para obtener una mejor comprensión, he estado analizando la literatura para encontrar una definición a prueba de agua de FP , FNP y otras, sin éxito.
En mi muy (humilde) opinión, creo que hay poco (¡correcto!) Material didáctico sobre estos temas.
Para problemas de decisión, las clases son conjuntos de idiomas (es decir, conjuntos de cadenas).
¿Cuáles son exactamente las clases para problemas de función? ¿Son conjuntos de relaciones, idiomas, ...? ¿Qué es una definición sólida?
fuente
Respuestas:
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
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 ) : yNPMV x x x .{(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)NPMVt NPMV x
: 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 Σ ∗ ).NPSV NPMV Σ∗
: 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).NPSVt NPSV Σ∗→Σ∗ 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⊈NPSV NPSV NPMV ⊆c f g x g f f siempre son un subconjunto de las salidas de . La pregunta correcta es, entonces, si todos los "función" tiene un refinamiento. Si es así, escribimos .g NPMV NPSV NPMV⊆cNPSV
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:FNP TFNP PF FP FP
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⊆FP FNP NPMV⊆cPF TFNP⊆FP NPMVt⊆cFP
fuente
Además de la extensa respuesta de Joshua, quiero agregar las siguientes definiciones de Elaine Ruch: Automata, Computability and Complexity .
Para mí, este ha sido el recurso más satisfactorio que consta de una sola página que he encontrado desde hace mucho tiempo.
fuente