Le commentaire d'Emil Jerabek est un bon résumé, mais je voulais souligner qu'il existe d'autres classes avec des définitions plus claires qui captent plus ou moins le même concept, et clarifier la relation entre toutes ces choses.
[Avertissement: même si je pense avoir bien compris les définitions, certaines des choses ci-dessous reflètent mes préférences personnelles - j'ai essayé de préciser où c'était.]
Dans le monde déterministe, une classe de fonctions n'est qu'une collection de fonctions (au sens mathématique habituel du mot "fonction", c'est-à-dire une carte ). Parfois, nous voulons autoriser des "fonctions partielles", dont la sortie est "non définie" pour certaines entrées. (De manière équivalente, les fonctions qui sont définies sur un sous-ensemble de Σ ∗ plutôt que sur la totalité.)Σ∗→Σ∗Σ∗
Malheureusement, il existe deux définitions différentes de flottant, et pour autant que je sache, elles ne sont pas équivalentes (bien qu'elles soient équivalentes "moralement").FP
- (définition 1) est la classe de fonctions qui peut être calculée en temps polynomial. Chaque fois que vous voyez F P et ce n'est pas dans un contexte où les gens parlent de F N P , T F N P , c'est la définition que je suppose.FPFPFNP,TFNP
Dans le monde non déterministe, les choses deviennent un peu drôles. Là, il est commode d’autoriser des «fonctions partielles à valeurs multiples». Il serait naturel d'appeler également une telle chose une relation binaire , c'est-à-dire un sous-ensemble de . Mais du point de vue de la complexité, il est souvent philosophiquement et mentalement utile de considérer ces choses comme des «fonctions non déterministes». Je pense que beaucoup de ces définitions sont clarifiées par les classes suivantes (dont les définitions sont complètement standardisées, sinon très bien connues):Σ∗×Σ∗
NPMVxxx{(x,y):y is output by some branch of the computation on input x}
NPMVtNPMVx
NPSVNPMVΣ∗
NPSVtNPSVΣ∗→Σ∗NPSVt=FPNP∩coNP
NPMV⊈NPSVNPSVNPMV⊆cfgxgffsont toujours un sous-ensemble des sorties de . La bonne question est alors de savoir si chaque "fonction" a un raffinement . Si c'est le cas, nous écrivons .gNPMVNPSVNPMV⊆cNPSV
- PF (un peu moins standard) est la classe des fonctions (potentiellement partielles) calculables en poly-temps. Autrement dit, une fonction ( ) est dans s'il existe une machine déterministe poly-temps telle que, sur les entrées la la machine sort , et sur les entrées la machine ne fait aucune sortie (/ rejette / dit "non" / comme vous voulez le formuler).f:D→Σ∗D⊆Σ∗PFx∈Df(x)x∉D
FNP est une classe de "problèmes de fonction" (plutôt qu'une classe de fonctions). J'appellerais également une "classe relationnelle", mais vraiment, quels que soient les mots que vous utilisez pour le décrire, vous devez vous clarifier par la suite, c'est pourquoi je ne suis pas particulièrement partisan de cette définition. À toute relation binaire il y a un "problème de fonction" associé. Qu'est-ce qu'un problème de fonction? Je n'ai pas de définition mathématique claire comme je le fais pour le langage / la fonction / la relation; elle est plutôt définie par ce qu'est une solution valide: une solution valide au problème de fonction associé à est toute fonction (potentiellement partielle) telle que siFNPR⊆Σ∗×Σ∗Rf(∃y)[R(x,y)]f génère un tel , sinon ne produit aucune sortie. est la classe des problèmes de fonction associés aux relations tels que (lorsqu'il est considéré comme un langage de paires) et est p-équilibré. Donc n'est pas une classe de fonctions, ni une classe de langages, mais une classe de "problèmes de fonction", où "problème" ici est défini grossièrement en termes de ce que cela signifie pour le résoudre.yfFNPRR∈PFNP
TFNP est alors la classe des problèmes de fonction dans - définie par une relation comme ci-dessus - un tel est total, dans le sens où pour chaque il existe un tel que .FNPRRxyR(x,y)
Afin de ne pas avoir à écrire des choses comme "Si chaque problème de fonction (resp., ) a une solution dans (resp., comme ci-dessus définition), alors ... "dans ce contexte on utilise la Définition 2 de , qui est:FNPTFNPPFFPFP
- FP (définition 2) est la classe des problèmes de fonction dans qui ont une solution poly-temps. On peut supposer que la solution (= fonction) ici est totale en choisissant une chaîne spéciale qui n'est pas un valide pour un quelconque , et en ayant la fonction sortie alors qu'il n'y aurait autrement pas de valide . (Si nécessaire, nous pouvons modifier la relation en ajoutant chaque à un 1, puis prendre pour être la chaîne 0; cela ne change pas la complexité de tout ce qui est impliqué).FNPy0yxy0yRyy0
Voici comment ces différentes définitions sont liées les unes aux autres, (définition 2, ce que vous devez supposer car c'est dans un contexte où il est comparé avec ) est équivalent dans . (def 2) est équivalent à (def 1).FNP⊆FPFNPNPMV⊆cPFTFNP⊆FPNPMVt⊆cFP