Esiste una relazione diretta tra la complessità di un algoritmo (come il caso migliore / peggiore di ordinamento rapido) e la classe di automi che possono implementare l'algoritmo.
La domanda su quale classe di automi può implementare un determinato algoritmo come l'ordinamento rapido è difficile, perché non è chiaro cosa conterebbe come implementazione di tale algoritmo. Per un ordinamento rapido, i confronti eseguiti devono essere certamente gli stessi, ma anche l'ordine in cui si verificano i confronti deve essere lo stesso? Che dire dell'ordine di accesso in lettura a elementi specifici dell'input? L'ordine delle operazioni di copia, spostamento e scambio per elementi specifici?
Dovresti specificare un certo numero di oracoli per quelle operazioni che ti interessano, ma poi sei già in una situazione molto specifica basata sull'algoritmo e abbastanza lontano dalle classi generali di automi comunemente studiate. Il modo per aggirare questo dilemma è parlare di problemi invece di algoritmi e formalizzare i problemi parlando di lingue.
Ad esempio, esiste una serie di complessità che gli automi push down possono esprimere?
Non proprio, perché un automa push down può leggere il suo input solo una volta e solo in avanti. Tuttavia, se si divide la macchina in una parte alla quale è consentito leggere l'input avanti e indietro come desiderato e mantenere un numero finito di puntatori a posizioni di input specifiche (NL) e una parte che è un push down automi che riceve il suo input dall'altra parte, quindi ottieni la classe di complessità LOGCFL , che è uguale a SAC 1 (una classe di circuito).
Se non separare queste due parti e basta aggiungere una pila di NL, allora si ottiene la classe di automi AuxPDA , che è pari alla classe di complessità P . Ma se decidi di limitare il tempo di esecuzione di tali automi (con stack e memoria ausiliaria logaritmica) al tempo polinomiale, otterrai NAuxPDA P , che è di nuovo uguale a LOGCFL. (E se insisti sul runtime polinomiale deterministico, scarta lo stack, ma consenti l'archiviazione ausiliaria pollogaritmica, otterrai SC .)
D'altra parte, se si mantiene la limitazione che gli automi possono leggere il proprio input solo una volta e solo in avanti, e richiedono inoltre che possa usare il suo stack solo in un modo molto deterministico direttamente basato sull'input (ovvero il simbolo di input determina se gli automi spingono qualcosa nello stack, ne estrae qualcosa dallo stack o lascia intatto lo stack), quindi si finisce con un automa pushdown visibilmente, che riconosce esattamente le lingue di parole nidificate , che possono anche essere riconosciute nello spazio logaritmico deterministico .