Wenn ich das richtig verstehe, hat NFA die gleiche Ausdruckskraft wie reguläre Ausdrücke. Oft ist es einfach, äquivalente reguläre Ausdrücke aus NFA abzulesen: Sie übersetzen Zyklen in Sterne, Kreuzungen als Alternativen und so weiter. Aber was ist in diesem Fall zu tun:
[ Quelle ]
Die überlappenden Zyklen machen es schwierig zu sehen, was dieser Automat akzeptiert (in Bezug auf reguläre Ausdrücke). Gibt es einen Trick?
Antworten:
Anstatt "abzulesen", sollten Sie eine von mehreren kanonischen Methoden anwenden, um dies zu tun. Das mit Abstand schönste, das ich gesehen habe, ist eines, das den Automaten als Gleichungssystem von (regulären) Sprachen ausdrückt, das gelöst werden kann. Es ist besonders schön, da es prägnantere Ausdrücke zu liefern scheint als andere Methoden.
Ich habe dieses Dokument geschrieben , in dem die Methode für Studenten im letzten Sommer erklärt wurde. Es bezieht sich direkt auf eine bestimmte Vorlesung; Die erwähnte Referenz ist eine typische Definition von regulären Ausdrücken. Ein Beweis von Ardens Lemma (ein notwendiges Ergebnis) ist enthalten; eine für die Richtigkeit der Methode fehlt. Wie ich in der Vorlesung erfahren habe, habe ich leider keine Referenz.
Kurz gesagt: Erstellen Sie für jeden Zustand die Gleichungqich
wobei die Menge der Endzustände ist und q i a → q j bedeutet, dass es einen Übergang von q i zu q j gibt, der mit a gekennzeichnet ist . Wenn Sie ∪ als + oder ∣ lesen (abhängig von Ihrer Definition des regulären Ausdrucks), sehen Sie, dass dies eine Gleichung für reguläre Ausdrücke ist.F qi→aqj qi qj a ∪ + ∣
Das Lösen (unter Verwendung von Ardens Lemma ) ergibt einen regulären Ausdruck für jeden Zustand, der genau die Wörter beschreibt, die ab q i akzeptiert werden können ; daher ist Q 0 (wenn q 0 der Anfangszustand ist) der gewünschte Ausdruck.Qi qi Q0 q0
Die Anwendung auf den gegebenen Automaten bleibt als Übung; Ein vollständiges Beispiel finden Sie im oben verlinkten Dokument .
Siehe auch hier, wo ich eine ähnliche Antwort gepostet habe.
quelle
Wenn es nur eine Kette von Staaten ohne Schleife gäbe, würden Sie wissen, was zu tun ist?
Wenn es eine einfache Schleife ohne diese überlappende Verzweigung gäbe, würden Sie wissen, was zu tun ist?
(Wenn die Antwort "Nein" lautet, denken Sie zuerst an diese Fälle.)
Die Idee ist nun, den Automaten schrittweise zu transformieren, um ihn in eine Form zu bringen, in der Sie diese Muster erkennen können: Ketten, Schleifen und divergierende Pfade, die am Ende wieder zusammenlaufen (was zu einem Wechsel führt). Achten Sie bei jedem Schritt der Transformation darauf, dass der transformierte Automat immer noch dieselbe Sprache erkennt.
Beachten Sie, dass dies ein nicht deterministischer Automat ist. Das, was Sie gepostet haben, ist zwar deterministisch, muss aber bei der Transformation nicht so bleiben.
Achten Sie darauf, zu überprüfen, welche Zustände endgültig sind. Es kann hilfreich sein, sich zuerst keine Sorgen zu machen und eine große Schleife zu erstellen und dann Teile zu duplizieren, die auf halbem Weg durch die Schleife enden.
Dies ist nicht unbedingt die effizienteste Technik oder diejenige, die den einfachsten regulären Ausdruck erzeugt, aber es ist einfach.
quelle
quelle
[(])
aber[()]
.