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.