È abbastanza facile scambiare tempo per lo spazio, come segue.
Convertire l'espressione regolare a un NFA - di concretezza negli algoritmi di confronto, si suppone che è il numero di NFA Stati, in modo che la O ( r s ) tempo legato per la simulazione direttamente NFA è valido e il tuo O ( 2 r ) lo spazio associato per l'esecuzione del DFA convertito è valido anche ogni volta che si lavora in una RAM in grado di indirizzare tanta memoria.rO(rs)O(2r)
Ora, suddividere gli stati dell'NFA (arbitrariamente) in sottogruppi S i di al massimo ⌉ r / k ⌉ indica ciascuno. All'interno di ogni sottoinsieme S i , possiamo indicizzare i sottoinsiemi A i di S i con numeri da 0 a 2 ⌈ r / k ⌉ - 1 .kSio⌈ r / k ⌉SioUNioSio02⌈ r / k ⌉- 1
Costruisci una tabella dove i e j sono nell'intervallo da 0 a k - 1 , c è un simbolo di input e A i è (l'indice numerico di) un sottoinsieme di S i . Il valore memorizzato nella tabella è (l'indice numerico di) un sottoinsieme di S j : uno stato y è in T [ i , j , c , A i ] se e solo seT[ i , j , c , Aio]iojk - 1cUNioSioSjyT[ i , j , c , Aio] appartiene a S j e c'è uno stato in A i che passa a y sul simbolo di input c .ySjUNioyc
Per simulare l'NFA, mantenere indici, uno per ogni S i , specificando il sottoinsieme A i degli stati in S i che possono essere raggiunti da alcuni prefissi dell'input. Per ogni simbolo di input c , utilizzare le tabelle per cercare, per ogni coppia i , j , l'insieme di stati in S j che può essere raggiunto da uno stato in A i mediante una transizione su c , quindi utilizzare un binario bit a bit o operazione sugli indici numerici di questi insiemi di stati per combinarli in un singolo sottoinsieme di stati di S jKSioUNioSiocio , jSjAicSj. Pertanto, ogni passaggio della simulazione richiede il tempo e il tempo totale per la simulazione è O ( s k 2 ) .O(k2)O(sk2)
Lo spazio richiesto è lo spazio per tutte le tabelle, ovvero . L'analisi del tempo e dello spazio è valida su qualsiasi RAM in grado di indirizzare quella quantità di memoria e che può eseguire operazioni binarie su parole sufficientemente grandi da indirizzare tale memoria.O(k22r/k)
Il compromesso spazio-tempo che ottieni da questo non corrisponde perfettamente alla simulazione NFA, a causa della dipendenza quadratica da . Ma poi, io sono scettico che O ( r s ) è il momento giusto vincolato per la simulazione NFA: come si fa a simulare un singolo passo della NFA più veloce di guardare tutti i (forse molti) quadratico transizioni permesse da un momento stato attivo in un altro stato? Non dovrebbe essere O ( r 2 s ) ?kO(rs)O(r2s)
In ogni caso, lasciando variare è possibile ottenere limiti di tempo su un continuum tra i limiti DFA e NFA, con meno spazio rispetto a DFA.k