Per quali problemi in P è più facile verificare il risultato che trovarlo?


52

Per (versioni di ricerca) di problemi NP completi, verificare una soluzione è chiaramente più facile che trovarla, poiché la verifica può essere effettuata in tempo polinomiale, mentre la ricerca di un testimone richiede (probabilmente) tempo esponenziale.

In P , tuttavia, la soluzione può essere trovata anche in tempi polinomiali, quindi non sembra ovvio quando la verifica è più veloce della ricerca della soluzione. In effetti, diversi problemi sembrano comportarsi diversamente da questo punto di vista. Qualche esempio:

  1. 3SUM: dati numeri di input, trova 3 tra loro che sommano a 0. Per quanto ne so, l'algoritmo più veloce conosciuto viene eseguito nel tempo e questo ordine è ipotizzato ottimale. D'altra parte, la verifica di una soluzione è molto più veloce, poiché tutto ciò che dobbiamo fare è solo verificare che i 3 numeri trovati siano effettivamente pari a 0.nO(n2o(1))

  2. Percorsi più brevi per tutte le coppie: dato un grafico con i pesi dei bordi, calcola la matrice della distanza del percorso più breve. Una volta che una tale matrice è stata data, si può verificare più velocemente che sia effettivamente la matrice della distanza corretta, piuttosto che ripeterla? La mia ipotesi è che la risposta sia forse sì, ma è certamente meno ovvia rispetto a 3SUM.

  3. Programmazione lineare. Se viene fornita una soluzione ottimale rivendicata, verificarla è più semplice che ripeterla, quando vengono fornite anche informazioni ausiliarie (una soluzione doppia ottimale). D'altra parte, se è disponibile solo la soluzione primaria, non è chiaro se si può controllare più velocemente, piuttosto che risolvere effettivamente l'LP.

Domanda: cosa si sa su questo argomento? Cioè, quando è più facile verificare una soluzione per un problema in P , che trovare la soluzione?


7
Penso che molti esempi provengano da problemi NP-completi che ricadono in P quando fissiamo alcuni parametri. Ad esempio, controllando se un grafico contiene una cricca di dimensione per fisso . La verifica richiede un tempo lineare, ma a meno che P = NP, la complessità del problema di ricerca (polinomiale) dipenda dak kkkk
Marzio De Biasi,

16
Possiamo verificare che un elenco di numeri interi sia ordinato con confronti , ma sono necessari confronti per ordinare un elenco non ordinato. n - 1 Θ ( n log n )nn1Θ(nlogn)
Thomas,

7
Vuoi che sia facile verificare sia casi sì che no per problemi di decisione? Per 3SUM, mentre è facile verificare le istanze yes in un tempo costante, non so se sia facile verificare un'istanza no. Oppure stai pensando di più lungo le linee di problemi in cui esiste un output non booleano, come la moltiplicazione di matrici? (La moltiplicazione delle matrici è un esempio di ciò che vuoi se consenti algoritmi randomizzati.)
Robin Kothari,

3
"D'altra parte, la verifica di una soluzione è molto più rapida, poiché tutto ciò che dobbiamo fare è solo verificare che i 3 numeri trovati siano effettivamente pari a 0." - Dobbiamo anche verificare che i 3 numeri trovati siano effettivamente parte dell'input.
hvd,

3
Ci sono problemi per i quali sappiamo che la verifica non è più semplice?
Raffaello

Risposte:


24

è noto che, dato un grafico G e un albero T, si può verificare in tempo lineare che T è un albero di spanning minimo di G. Ma non abbiamo ancora un algoritmo di tempo lineare deterministico per calcolare l'MST. Ovviamente il divario è minuscolo (1 vs ), ma è ancora lì :))α(n)


4
Forse è giusto aggiungere che esiste un algoritmo randomizzato che viene eseguito nel tempo lineare previsto (l'algoritmo di Karger-Klein-Tarjan).
Sasho Nikolov,

2
Inoltre, nel caso qualcuno voglia un link, questo è l'algoritmo di verifica MST lineare più semplice che conosco: webhome.cs.uvic.ca/~val/Publications/Algorithmica-MSTverif.ps .
Sasho Nikolov,

20

Questo documento mostra che ci sono algoritmi di verifica per entrambe le istanze SÌ e NO per 3 problemi, tra cui Flusso massimo, 3SUM e APSP, che sono più veloci di un fattore polinomiale rispetto ai limiti noti per il calcolo della soluzione stessa.

Esiste una classe di problemi, vale a dire quelli che migliorano il tempo di esecuzione è SETH-hard, il cui tempo di esecuzione per la verifica di NO istanze è improbabile che sia significativamente più veloce del tempo per calcolare la soluzione, altrimenti la congettura di questo documento chiamata Non deterministica L'ipotesi del tempo esponenziale forte fallirebbe.


18

Per alcuni problemi non sembra esserci alcuna differenza. In particolare, Vassilevska Williams & Williams mostrano:

  • per la moltiplicazione della matrice booleana, calcolare il prodotto della matrice e verificare l'equivalente subcubico del prodotto della matrice, nel senso che entrambi hanno algoritmi del tempo subcubico o nessuno dei due.

  • Lo stesso vale per il calcolo e la verifica del prodotto matrice su qualsiasi "struttura estesa (min, +)" (vedere la carta per la definizione, ma ciò include molti problemi naturali).

(Ora, ovviamente, è possibile che tutti questi problemi abbiano algoritmi subcubici, e quindi potrebbe esserci una differenza polinomiale tra elaborazione e verifica, ma per questi problemi non può esserci una differenza cubica. E mi sembra plausibile che in infatti richiedono tutti un tempo essenzialmente cubico.)


2
D'altra parte, per la moltiplicazione di matrici in un campo abbastanza grande, esiste un algoritmo randomizzato quadratico a tempo per la verifica, mentre il tempo di esecuzione più veloce per calcolare il prodotto è n ^ omega.
Thatchaphol,

2
@Thatchaphol: Sì, anche se molte persone credono che omega = 2 ... Inoltre, è ampiamente riconosciuto che la moltiplicazione della matrice booleana (ovvero la matrice di calcolo mult sul booleano e-o il semi-anello) ha una natura leggermente diversa dalla moltiplicazione della matrice su un campo.
Joshua Grochow,

16
  • Decidere se esiste un valore in un array richiede tempo (o se l'array viene ordinato).Ω ( registro n )Ω(n)Ω(logn)

    La verifica che un array contenga il valore dato in una data posizione è possibile nel tempo .O(1)

  • L'ordinamento (nel modello di confronto) richiede time , ma è possibile verificare che un array o un elenco sia ordinato nel tempo .O ( n )Ω(nlogn)O(n)


2
Ω(nlogn)O(1)

O(n)

Θ(n)

10

Penso che molti esempi provengano da problemi NP completi che ricadono in P quando fissiamo uno o più parametri .

kkk

kP=NPkΩ(nk))

Altri esempi: trovare un percorso di lunghezza hamiltoniano k


9

O~(n6)O~(n3)


il complemento (compostezza) è ancora più facile da vedere!
Yonatan N,

3

O(n2ϵ) meno che l'ipotesi del forte tempo esponenziale sia falsa. Naturalmente, possiamo verificare un isomorfismo in tempo lineare.

PΩ(n1ϵ) spazio tra la ricerca e la verifica.

O(n2/logn)

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.