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