Spiegare "decidibilità" e "verificabilità"


8

Sto cercando di comprendere (intuitivamente) i due termini "decidibilità" e "verificabilità".

Ho fatto una ricerca ragionevole e ho esaminato i vari testi su cui posso mettere le mani. Tuttavia, la loro comprensione intuitiva sembra sfuggirmi, specialmente per la seconda.

Tra le molte definizioni trovate, la seguente trovata in questa pagina , mi spiegava chiaramente la decidibilità.

Una lingua è chiamata decidibile se esiste un metodo - qualsiasi metodo - per determinare se una determinata parola appartiene o meno a quella lingua.

Tuttavia, non riesco a trovare una definizione parallela per verificabilità.

Nel libro Theory of Computation di Sipser , troviamo,

P = la classe di lingue per le quali è possibile decidere rapidamente l' appartenenza .

NP = la classe di lingue per cui è possibile verificare rapidamente l' appartenenza .

Alla luce di quanto sopra, voglio capire la verificabilità.

Fornisci il maggior numero di esempi possibile, in un momento provo a coglierne il significato, in quello successivo mi confondo di nuovo.


Questo articolo ( cs.uky.edu/~lewis/cs-heuristic/text/class/p-np.html ) fornisce alcuni esempi interessanti sulla questione.
Masroor,

2
Queste nozioni non sono limitate a P e NP. Torna al capitolo sulla calcolabilità e l'enumerabilità. E guarda le definizioni formali.
Raffaello

Risposte:


7

La chiave per capire qui è che P e NP sono classi di problemi decisionali. Ciò significa che tutti hanno risposte sì / no.

Quindi quando diciamo che un problema come 3-SAT è NP-Complete, significa che data un'istanza di 3-SAT (ovvero una parola potenzialmente nella lingua), non esiste un modo efficace noto per verificare se la parola è o non è nella lingua.

Dire che qualcosa è in NP significa che esiste una sorta di "prova" per ogni stringa nella lingua, che è polinomiale nella lunghezza dell'input.

Ad esempio, in 3-SAT, stiamo chiedendo, esiste un'assegnazione di Vero / Falso a un insieme di variabili in una formula booleana, in modo che la formula risulti vera. La parola che stiamo testando è la formula booleana. Non esiste un modo noto per scoprire se esiste un'unica soluzione che rende vera l'intera formula. Ma, se abbiamo un insieme di valori vero / falso per le variabili, è molto facile controllare (in tempo polinomiale) se fa sì che la formula valuti su vero.

Il punto chiave qui è che la parola che stiamo testando NON è i valori vero / falso per ogni variabile. La parola che stiamo testando è la formula contenente le variabili e la lingua è l'insieme di tutte le formule booleane che valutano come vere.

Non sappiamo come testare in modo efficiente se la parola (formula) è nella lingua (può essere valutata come vera), ma dato un insieme di assegnazioni vero / falso, possiamo verificare se la valutazione è vera, ovvero è una "prova "che la parola (formula) è nella lingua. Quindi il problema è in NP, ma non è noto per essere in P.

NP è in realtà la classe di problemi decisionali polinomiali non deterministici risolvibili. Questo perché, in una macchina di turing non deterministica, abbiamo punti "decisionali" in cui possiamo intraprendere una delle azioni multiple, e il nostro certificatore polinomiale sta sostanzialmente dicendo quale decisione prendere in ogni punto decisionale.


Non c'è "esso" da trovare. P e NP sono classi di decisione, quindi non è un problema di ricerca, è un problema sì / no. Una potenziale soluzione al problema potrebbe comportare la ricerca, ovvero se il problema chiede "esiste ...", ma tecnicamente non è necessario "trovare" qualcosa, solo per verificare se una condizione è vera o falsa.
jmite,

Ok scusa, mia cattiva. Hai perfettamente ragione.
wece

post eliminato grazie per le correzioni. una scusa ancora per il mio errore.
wece

Non c'è bisogno di scusarsi!
jmite,

ben potrebbe essere stato più confuso che disponibile ...
wece

1

supponiamo che tu mi dia un problema e mi hai chiesto una soluzione, quindi diciamo che puoi controllare solo la quantità polinomiale della mia prova (vale a dire: puoi eseguire un programma per computer efficiente sulla mia prova) quando ti invio la prova della soluzione tutto ciò che non devi fare altro che eseguire il programma e decidere in base all'output del programma.
per esempio: supponete che mi chiediate se un grafico è tricolore, quindi quello che devo fare è inviare una colorazione 3 del grafico, quindi controllare se tutti i vertici adiacenti hanno colori diversi, quindi la colorazione è legale e il programma termina con "accetta" (altrimenti la prova non è accettata e terminiamo con "rifiuta").
viene chiamato per verificare "rapidamente".
se puoi costruire un "efficiente" "programma per computer" (o semplicemente: algoritmo polinomiale) che dice se un input (una stringa di lunghezza n) è nella lingua (o se l'output del programma 1 \ "accetta") questo è ciò che intendo per classe di complessità P.
esempio: supponiamo che io ti dia un elenco di stringhe (diciamo la rubrica) e ti abbia chiesto un nome che devi dire se è nel libro o no. una soluzione è quella di lanciare tutti i nomi e confrontare ogni nome con il nome dato, che dice che puoi risolverlo in tempo lineare.
un altro esempio è: dato un grafico G = (V, E) e un bordo e = (u, v) e vuoi dire se il bordo è nel grafico.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.