2011-01-02 14 views
3

(i fand die Antwort, seine unten in den Kommentaren für alle anderen)Zeitkomplexität Abwägungen von nfa vs DFA

ich suche nach einer Diskussion auf dem besser genutzt und in welcher circumstanes in einem Compiler eine nfa oder dfa. Was ist die Zeit Komplexität Kompromisse von der Simulation eines NFA vs dfa und welche ist besser geeignet unter welchen Umständen in einem Compiler?

Vielen Dank, im für eine College-Prüfung und Hilfe revidieren würde :)

Leanne stark apriciated werden. jemand antwortet mir :(:)

+0

fand ich die Antwort für jemand anderen suchen .. – user560618

+0

Time-Space-Tradeoffs Ziel: Gegebene reg. exp.r und input stringx, bestimmen, obx in L (r) ist Methode Nr. 1: Erstellen Sie NFAN fromr unter Verwendung der Thompson-Konstruktion, führen Sie dann den vorherigen Algorithmus aus ¡Kann NFA inO (| r |) -Zeit konstruieren. ¡N hat höchstens doppelt so viele Zustände wie | r | und höchstens zwei Übergänge von jedem Zustand, so dass die Übergangstabelle isO (| r |) ist. ¡Vorheriger Algorithmus akzeptiert oder ablehntx inO (| r | x | x |) Zeit – user560618

+0

Methode # 2: Baue NFAN fromr unter Verwendung der Thompson-Konstruktion, dann DFAD von N unter Verwendung der Subset-Konstruktion; Verwenden Sie dann den DFA-Algorithmus von letzter Zeit für das Akzeptieren/Ablehnen ¡D kann bis zu 2k Zustände haben, wobei k = # in N steht. '' Worst- Case '' Zeichenfolge (a | b) * a (a | b) (a | b) ... (a | b): Warum? ¡DFA-Akzeptanzalgorithmus akzeptiert oder ablehntx inO (| x |) – user560618

Antwort

0
  • Die Bauzeit für ein DFA von einem NFA ist O (2^m), wobei m die Anzahl der Knoten ist.
  • Die Laufzeit eines DFA ist O (n), wobei n die Länge der Eingabezeichenfolge ist. Dies liegt daran, dass nur ein Pfad durch den DFA für eine bestimmte Zeichenfolge existiert.
  • Die Bauzeit für ein NFA sollte O (m) sein, wobei m die Anzahl der Knoten ist
  • Die Laufzeit für ein NFA ist O (m²n), weil es nicht deterministisch ist und der Computer alle möglichen prüfen muss Pfad für das aktuelle Zeichen in der Zeichenfolge. (Vorausgesetzt, keine Look-Ahead, es nicht wissen, was das nächste Zeichen sein wird, so läuft es in Sackgassen)

Diese Zahlen geben könnte ua kurze Idee

+0

Das Ausführen eines NFA über Backtracking, wie Sie vermuten, führt im schlimmsten Fall zu O (2^n). Zum Glück gibt es intelligentere Algorithmen, die O (mn) -Zeit benötigen, obwohl sie keine Rückreferenzen unterstützen. (Eine Implementierung ist Googles re2.) – delnan