Es ist einfach genug, Zeit gegen Raum zu tauschen, wie folgt.
Konvertieren Sie den regulären Ausdruck in einen NFA. Um den Vergleich von Algorithmen zu verdeutlichen, nehmen wir an, dass die Anzahl der NFA-Zustände ist, sodass Ihre O ( r s ) -Zeit für die direkte Simulation des NFA gültig ist und Ihr O ( 2 r) ) Der für die Ausführung des konvertierten DFA gebundene Speicherplatz ist auch gültig, wenn Sie in einem RAM arbeiten, der so viel Speicher adressieren kann.rO ( r s )O ( 2r)
Teilen Sie nun die Zustände der NFA (beliebig) in Teilmengen S i von jeweils höchstens ⌈ r / k ⌉ Zuständen auf. Innerhalb jeder Teilmenge S i , wir können Indexuntermengen A i von S i durch Zahlen von 0 zu 2 ⌈ r / k ⌉ - 1 .kSich⌈ r / k ⌉SichEINichSich02⌈ r / k ⌉- 1
Erstellen Sie eine Tabelle wobei i und j im Bereich von 0 bis k - 1 liegen , c ein Eingabesymbol ist und A i (der numerische Index von) eine Teilmenge von S i ist . Der in der Tabelle gespeicherte Wert ist (der numerische Index von) eine Teilmenge von S j : Ein Zustand y ist genau dann in T [ i , j , c , A i ], wennT[ i , j , c , Aich]ichjk - 1cEINichSichSjyT[ i , j , c , Aich] gehört zu S j und es gibt einen Zustand in A i , derbeim Eingabesymbol c zu y übergeht .ySjEINichyc
Um die NFA zu simulieren, pflegen Sie Indizes, einen für jedes S i , und geben Sie die Teilmenge A i der Zustände in S i an , die durch ein Präfix der Eingabe erreicht werden können. Verwenden Sie für jedes Eingabesymbol c die Tabellen, um für jedes Paar i , j die Menge von Zuständen in S j nachzuschlagen , die von einem Zustand in A i durch einen Übergang auf c erreicht werden können , und verwenden Sie dann ein bitweises binäres oder Operation an den numerischen Indizes dieser Mengen von Zuständen, um sie zu einer einzigen Teilmenge von Zuständen von S j zu kombinierenkSichEINichSichcich , jSjEINichcSj. Jeder Schritt der Simulation benötigt also die Zeit , und die Gesamtzeit für die Simulation beträgt O ( s k 2 ) .O ( k2)O ( s k2)
Der benötigte Platz ist der Platz für alle Tabellen, der . Die Zeit- und Raumanalyse gilt für jeden RAM, der so viel Speicher adressieren kann, und für binäre Operationen für Wörter, die groß genug sind, um so viel Speicher zu adressieren.O ( k22r / k)
Der Zeit-Raum-Kompromiss, der sich daraus ergibt, passt aufgrund der quadratischen Abhängigkeit von nicht perfekt zur NFA-Simulation . Aber dann, ich bin skeptisch , dass O ( r s ) ist der richtige Zeitpunkt für die Simulation NFA gebunden: wie Sie einen einzelnen Schritt des NFA simulieren kann schneller als bei allen suchen die (möglicherweise quadratisch viele) von einem zur Zeit erlaubten Übergänge aktiver Zustand in einen anderen Zustand? Sollte es nicht O ( r 2 s ) sein ?kO ( r s )O ( r2s )
Indem Sie variieren lassen, können Sie auf jeden Fall Zeitgrenzen für ein Kontinuum zwischen den DFA- und NFA-Grenzen erhalten, mit weniger Platz als der DFA.k