Vor 20 Jahren habe ich ein Paket für reguläre Ausdrücke erstellt, das Konvertierungen von regulären Ausdrücken in eine Finite-State-Maschine (DFA) enthielt, und eine Vielzahl von geschlossenen Operationen für reguläre Ausdrücke (Kleene-Stern, Verkettung, Umkehrung, Mengenoperationen usw.) unterstützt. Ich war mir nicht sicher über die schlechteste Leistung meines Pakets.
Ein DFA hat die gleiche Ausdruckskraft wie ein NDFA, da ein NDFA mit n Zuständen trivial in einen DFA mit 2 ^ n Zuständen umgewandelt werden kann. Gibt es jedoch Garantien für eine solche Konvertierung, die keine exponentielle Explosion im Zustand erfordern?
Ich konnte keine Beispiele für sich schlecht verhaltende reguläre Ausdrücke oder NDFAs finden, aber ich habe nicht viel Zeit darauf verwendet, darüber nachzudenken. Ich vermute einen regulären Ausdruck wie ((((e | A | B | C) * (e | D | E | F)) * (e | G | H | I)) * (e | J | K | L | M)) *, das viele Wechsel und Kleene-Sterne mischt, hätte einen linearen NDFA, aber einen expansiven DFA.
quelle
Antworten:
Es ist bekannt, dass es für jedes Paar
n,a
solcher natürlicher Zahlenn <= a <= 2^n
einen minimalen NDFA mitn
Zuständen gibt, deren entsprechende äquivalente minimale dfaa
Zustände hat (über einem vier Buchstaben umfassenden Alphabet).Siehe das Papier hier: Deterministische Explosionen minimaler nicht deterministischer endlicher Automaten über einem festen Alphabet .
Abstract der Arbeit:
Ich nehme an, die Antwort auf Ihre Frage lautet nein.
quelle
Das klassische Beispiel für eine Sprache mit einer exponentiellen Trennung zwischen DFA-Größe und NFA-Größe ist die folgende endliche Sprache: Binäre Zeichenfolgen mit einer Länge von genau 2n, bei denen die erste Hälfte nicht der zweiten Hälfte entspricht. Eine NFA würde einen Index i erraten, in dem die erste und die zweite Hälfte nicht übereinstimmen. Eine Untergrenze für einen DFA ergibt sich beispielsweise aus der Komplexität der Kommunikation.
quelle
Der minimale DFA, der einem NFA entspricht, hat im schlimmsten Fall 2 ^ n Zustände, so dass Sie nichts garantieren können. Ohne ein konstruktives Beispiel zu haben, können Sie in einer NFA nach dem Lesen einer bestimmten Eingabezeichenfolge eine beliebige Teilmenge von Zuständen haben, und jede dieser Teilmengen kann sich bei der Beobachtung eines Zeichens unterschiedlich verhalten. Angenommen, eine Sprache mit zwei Buchstaben im Alphabet (a und b) und eine NFA N mit n Zuständen, die mit einem akzeptierenden Zustand bei s_0 beginnt. Zählen Sie nun alle Teilmengen von Zuständen von N auf und erstellen Sie die Übergangstabelle so, dass Sie durch Beobachten von "a" aus der Teilmenge S_i zur Teilmenge S_i + 1 und durch Beobachten von b zur Teilmenge S_i-1 gelangen (dies ist für einige Aufzählungen möglich, denke ich) ). Diese Automaten haben nun n Zustände und akzeptieren Folgen von ma's und nb's, so dass mn = 0 mod 2 ^ | N |, und kann nicht mit einem DFA mit weniger als 2 ^ | N | ausgedrückt werden states (da möglicherweise alle Teilmengen von States der NFA N durchlaufen werden müssen).
quelle