Classi di complessità relative all'elencazione di tutte le soluzioni?


15

Stavo leggendo una domanda su Stack Overflow che mi chiedeva se fosse NP -hard a elencare tutti i cicli semplici in un grafico contenente un nodo particolare e mi venne in mente che non riuscivo a pensare a nessuna classe di complessità esistente adatta per parlando di problemi del modulo "elenca tutte le soluzioni a questo problema". La classe NP in un certo senso è costituita da problemi che chiedono se esiste almeno una soluzione, la classe FNP chiede di produrre un'unica soluzione e la classe #P chiede di contare quante soluzioni ci sono, ma nessuna di queste affronta la complessità di elencare esaurientemente tutte le possibili soluzioni.

Esiste una classe di complessità per descrivere i problemi che sono della forma "dato un predicato calcolabile in tempo polinomiale P(x,y) e una stringa , enumera tutto per cui è vero soggetto a [inserire alcuni appropriate restrizioni di complessità]? " Capisco che potrebbe essere difficile fissare le restrizioni dato che il numero di soluzioni potrebbe essere esponenzialmente più grande della dimensione dell'input , sebbene ciò non sembri insormontabile.xyP(x,y)x


Interessante. Forse in pratica troppi casi di problemi rilevanti hanno spesso un numero esponenziale di soluzioni. Le istanze per SAT e CLIQUE, in generale, hanno un ampio spazio di soluzione.
Chi,

3
Ecco un'altra risposta per formalizzare questo. Un problema è in X E (per X-enumerable) se esiste un X-algoritmo A con cosicché A ( x , i ) restituisce la i esima soluzione (cioè il I ° y con P ( x , y ) ) wrt alcuni ordini. Nota come questo è simile a come a volte si definisce l'IR. Ciò elude la dimensione dello spazio della soluzione e si concentra su quanto sia difficile trovare la soluzione successiva. Il costo totale è disponibile per somma, ovviamente. PXEAA(x,i)iIyP(x,y)
Raffaello

3
(Non ho mai visto definita come una classe , ma siete consapevoli del concetto di enumerazione con un ritardo polinomiale ?)

@Raphael Questo potrebbe non essere quello che stiamo cercando. Ad esempio, se l'algoritmo migliore per deve iterare su tutte le soluzioni fino a quando non ha trovato i di essi e viene eseguito nel tempo Θ ( f ( | x | ) ) , la complessità che stiamo cercando è Θ ( f ( | x | ) ) , ma la somma suggerirebbe complessità Θ ( f ( | x |A(x,i)iΘ(f(|x|))Θ(f(|x|)) . Θ(f(|x|)2)
Lieuwe Vinkhuijzen,

@RickyDemer Questo è quello che stavo scuotendo dai miei squarci, non è vero? Buono a sapersi che esiste una formalizzazione consolidata.
Raffaello

Risposte:


10

Il concetto che stai cercando si chiama complessità di enumerazione , che è lo studio della complessità computazionale di enumerare (elencare) tutte le soluzioni a un problema (o i membri di un linguaggio / set). Gli algoritmi di enumerazione possono essere modellati come un processo in due fasi: una fase di pre-calcolo e una fase di enumerazione con ritardo . Entrambi questi passaggi hanno le loro complessità temporali e spaziali (forse anche l'entropia). Nello spirito generale della complessità, ci sono spesso compromessi tra questi da considerare.

Il passaggio di pre-calcolo esegue alcune operazioni necessarie prima che la prima soluzione venga enumerata. Ciò potrebbe comportare la ricerca della soluzione stessa o l'inizializzazione di una grande struttura di dati che ridurrà il ritardo complessivo tra ciascuna soluzione.

Il ritardo è il costo delle risorse associato al calcolo necessario tra soluzioni numerate arbitrarie. In altre parole, il ritardo è una misura dello spazio e del tempo necessario per produrre il soluzione dopo l' i t h uno. I problemi le cui soluzioni che impiegano il tempo O ( 1 ) per ogni enumerazione si dice abbiano un ritardo costante. Si dice che un requisito di tempo O ( p o l y ( n ) ) abbia un ritardo polinomiale.i+1thithO(1)O(poly(n))

Per il problema di enumerazione che hai menzionato in modo specifico nella tua domanda, dovresti esaminare la classe e i relativi fratelli nella sezione 2.1 di "Enumerazione: algoritmi e complessità" di Johannes Schmidt (in basso).ENUMNP


Perché ci preoccupiamo del tempo e del ritardo di precomputazione?

Il ritardo è fondamentale per comprendere la vera complessità dei problemi di enumerazione. Enumerando gli elementi di (fino alla dimensione n ) e { x : ϕ ( x ) } dove ϕ ( x ) è una formula booleana (cioè SAT) entrambi richiedono tempo esponenziale. Tuttavia, elencando attraverso Σ Σn{x:ϕ(x)}ϕ(x)Σrichiede solo un ritardo costante poiché puoi semplicemente scorrere gli elementi in un certo ordine. Per quanto ne sappiamo, il ritardo nell'enumerazione delle soluzioni in un'istanza 3SAT potrebbe essere esponenziale. Il nostro compito come teorici della complessità è quello di capire perché quest'ultimo problema sia fondamentalmente più difficile (più complesso) del primo. Il ritardo fa un ottimo lavoro nel mostrare questa differenza.

Allo stesso modo, dobbiamo anche sapere quanta precomputazione viene eseguita. Possiamo ridurre il ritardo per qualsiasi problema di enumerazione a tempo e spazio costanti precompilando tutte le soluzioni e memorizzandole in un elenco da enumerare in un secondo momento. La sfida è trovare il miglior equilibrio tra le due risorse.

L'ordine in cui si enumerano gli elementi può anche influenzare la complessità. Richiedere la restituzione dei risultati in un ordine ordinato specificato potrebbe richiedere l'esecuzione di calcoli aggiuntivi in ​​entrambi i passaggi. Anche se sono certamente studiate situazioni in cui qualsiasi ordine è sufficiente (purché ogni elemento elencato sia unico).

Per quanto ne so, queste classi in genere non hanno etichette concise (simili a e N P ). Non possiamo aspettarci fattibilmente di essere in grado di farlo poiché le classi di complessità dell'enumerazione si destreggiano tra 3 o più risorse (precomputazione / tempo totale, spazio, ritardo ed entropia). Esistono semplicemente troppe combinazioni di limiti di risorse per distribuire nomi speciali. Ciò non rende queste lezioni meno interessanti e non impedisce ai ricercatori di provare comunque.PNP


risorse

Questo sondaggio (davvero un tentativo di formalizzazione) dovrebbe aiutarti a iniziare. Dimostra anche alcuni teoremi di gerarchia di base.

Enumerazione: algoritmi e complessità (Johannes Schmidt, 2009)

https://www.thi.uni-hannover.de/fileadmin/forschung/arbeiten/schmidt-da.pdf

Per un elenco dei risultati nella complessità dell'enumerazione, dai un'occhiata a questa raccolta a cura di Kunihiro Wasa. Poiché è classificato in base al tipo di problema, è possibile trovare facilmente una serie di articoli dedicati all'enumerazione dei cicli dei grafici. Dovrebbe essere semplice modificare gli algoritmi coinvolti per considerare solo i cicli con un dato nodo.

http://www-ikn.ist.hokudai.ac.jp/~wasa/enumeration_complexity.html


Avrei ragione nel pensare che l'enumerazione degli elementi di fino alla dimensione n con ritardo O ( 1 ) richiederebbe che vengano emessi in ordine di codice Gray? Oppure si presume normalmente nell'area della complessità dell'enumerazione che scrivere una soluzione richieda O ( 1 ) tempo, anche se lo spazio necessario per archiviare la soluzione è più grande di quello? ΣnO(1)O(1)
j_random_hacker,

1
@j_random_hacker Non penso che il tuo pensiero sia sbagliato, anche se la vera risposta alla tua domanda è "dipende". Gli autori di questi articoli di solito indicano quale modello di calcolo (normale nastro TM vs. RAM vs. Word RAM) stanno usando. Questa scelta cambierà ciò che può essere considerato un'operazione a tempo costante e ciò che non può (come aumentare un numero o generare output). Si presume che questa differenza scompaia non appena il ritardo diventa polinomiale a causa della tesi estesa di Church Turing.
mdxn,
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.