Il commento di Emil Jerabek è un bel riassunto, ma volevo sottolineare che ci sono altre classi con definizioni più chiare che catturano più o meno lo stesso concetto e chiarire la relazione tra tutte queste cose.
[Avvertenza: mentre credo di aver ottenuto le definizioni giuste, alcune delle cose che seguono riflettono le mie preferenze personali - ho cercato di essere chiaro su dove fosse.]
Nel mondo deterministico, una classe di funzioni è solo una raccolta di funzioni (nel solito senso matematico della parola "funzione", cioè una mappa ). Occasionalmente vogliamo consentire "funzioni parziali", il cui output è "indefinito" per determinati input. (Equivalentemente, funzioni definite su un sottoinsieme di Σ ∗ piuttosto che su tutto.)Σ*→ Σ*Σ*
Sfortunatamente, ci sono due diverse definizioni per fluttua intorno e, per quanto posso dire, non sono equivalenti (sebbene siano "moralmente" equivalenti).FP
- (definizione 1) è la classe di funzioni che possono essere calcolate in tempo polinomiale. Ogni volta che vedi F P e non è in un contesto in cui le persone parlano di F N P , T F N P , questa è la definizione che presumo.FPFPFNP,TFNP
Nel mondo non deterministico le cose diventano un po 'divertenti. Lì, è conveniente consentire "funzioni parziali, multivalore". Sarebbe naturale anche chiamare una cosa del genere una relazione binaria , cioè un sottoinsieme di . Ma dal punto di vista della complessità è spesso filosoficamente e mentalmente utile pensare a queste cose come "funzioni non deterministiche". Penso che molte di queste definizioni siano chiarite dalle seguenti classi (le cui definizioni sono completamente standardizzate, se non molto note):Σ∗×Σ∗
: la classe di "funzioni parziali a più valori" calcolabili da una macchina non deterministica in tempo polinomiale. Ciò significa che esiste una macchina non deterministica poli-tempo, e sull'input x , su ciascun ramo non deterministico, può scegliere di accettare e produrre un output, oppure rifiutare e non produrre alcun output. L'output "multivalore" sull'ingresso x è quindi l'insieme di tutti gli output su tutti i rami non deterministici quando viene dato x come input. Si noti che questo set può essere vuoto, quindi come "funzione multi-valore" può essere solo parziale. Se la pensiamo in termini di relazioni binarie, ciò corrisponde alla relazione { ( x , y ) : yNPMVxxx .{(x,y):y is output by some branch of the computation on input x}
: "funzioni" totali in N P M V , ovvero su ogni inputx, almeno un ramo accetta (e quindi genera un output, per definizione)NPMVtNPMVx
: funzioni a valore singolo (potenzialmente parziale) in N P M V . C'è una certa flessibilità qui, tuttavia, in quanto più filiali possono accettare, ma se una qualsiasi filiale accetta, è necessario garantire a tutte le filiali che accettano di produrre lostessooutput (in modo che sia realmente a valore singolo). Tuttavia, è ancora possibile che nessun ramo accetti, quindi la funzione è solo una "funzione parziale" (cioè non definita su tutto Σ ∗ ).NPSVNPMVΣ∗
: valore singolo funzioni totali in N P S V . Queste sono davvero funzioni, nel solito senso della parola, Σ ∗ → Σ ∗ . È un esercizio non troppo difficile vedere che N P S V t = F P N P ∩ c o N P (usando Def 1 per FP sopra).NPSVtNPSVΣ∗→Σ∗NPSVt=FPNP∩coNP
NPMV⊈NPSVN 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 VNPSVNPMV⊆cfgxgffsono sempre un sottoinsieme degli output di . La domanda corretta è quindi se ogni "funzione" ha un raffinatezza. In tal caso, scriviamo .gNPMVNPSVNPMV⊆cNPSV
- f : D → Σ ∗ D ⊆ Σ ∗ P F x ∈ D f ( x ) x ∉ DPF (un po 'meno standard) è la classe di funzioni (potenzialmente parziali) calcolabili in poly-time. Vale a dire, una funzione da ( ) è in se esiste una macchina deterministica poli-temporale tale che, sugli input il output della macchina , e sugli input la macchina non emette alcun output (/ rifiuta / dice "no" / comunque si desidera esprimerlo).f:D→Σ∗D⊆Σ∗PFx∈Df(x)x∉D
F N P R ⊆ Σ ∗ × Σ ∗ R f ( ∃ y ) [ R ( x , y ) ] f y f F N P R R ∈ P F N PFNP è una classe di "problemi di funzione" (piuttosto che una classe di funzioni). anche una "classe relazionale", ma in realtà qualunque parola tu usi per descriverla, devi seguito, motivo per cui non sono particolarmente parziale di questa definizione. A qualsiasi relazione binaria esiste un "problema di funzione" associato. Qual è un problema di funzione? Non ho una chiara definizione matematica come faccio per linguaggio / funzione / relazione; piuttosto, è definito da ciò che è una soluzione valida: una soluzione valida al problema di funzione associato a è qualsiasi funzione (potenzialmente parziale) tale che seFNPR⊆Σ∗×Σ∗Rf(∃y)[R(x,y)]f emette uno qualsiasi di questi , altrimenti non produce alcun output. è la classe di problemi di funzione associati alle relazioni tale che (se considerato come un linguaggio di coppie) ed è p-equilibrato. Quindi non è una classe di funzioni, né una classe di linguaggi, ma una classe di "problemi di funzione", dove "problema" qui è definito approssimativamente in termini di cosa significa risolverlo.yfFNPRR∈PFNP
F N P R R x y R ( x , y )TFNP è quindi la classe di problemi di funzione in - definita da una relazione come sopra - tale è totale, nel senso che per ogni esiste una tale che .FNPRRxyR(x,y)
Per non dover scrivere cose come "Se ogni problema di funzione (resp., ) ha una soluzione in (resp., secondo quanto sopra definizione), quindi ... "in questo contesto si usa la Definizione 2 di , che è:T F N P P F F P F PFNPTFNPPFFPFP
- F N P y 0 y x y 0 y R y y 0FP (definizione 2) è la classe di problemi di funzione in che hanno una soluzione poly-time. Si può presumere che la soluzione (= funzione) qui sia totale selezionando una stringa speciale che non è una valida per qualsiasi , e avendo la funzione in uscita quando altrimenti non ci sarebbe valida . (Se necessario, possiamo modificare la relazione anteponendo ogni con 1, quindi prendere come stringa 0; ciò non modifica la complessità di nulla.FNPy0yxy0yRyy0
Ecco come queste varie definizioni si relazionano tra loro, (definizione 2, che è quello che dovresti assumere perché è in un contesto in cui viene confrontato con ) è equivalente a . (def 2) è equivalente a (def 1).F N P N P M V ⊆ c P F T F N P ⊆ F P N P M V t ⊆ c F PFNP⊆FPFNPNPMV⊆cPFTFNP⊆FPNPMVt⊆cFP