Der erste Trick besteht darin, sich die Multiplikationstabelle als Übergangstabelle eines Automaten vorzustellen, wobei jeder Zustand einen Buchstaben in Ihrer Multiplikationstabelle darstellt, sich aber noch keine Gedanken über die Akzeptanz macht. Die Buchstaben links und im Hauptteil der Tabelle sind also tatsächlich Zustände - es wäre genauer, sie als q a , q b , q c zu schreiben , aber ich werde es nicht tun. Die Buchstaben oben sind Eingaben.EINqein, qb, qc
Konstruieren Sie dann den Automaten (" T " für die Transponierung) für die umgekehrte Multiplikation durch Transponieren von A :EINT.T.EIN
EINT.einbceineineincbceinbcbcein
So führt in den Zustand c , und ebenfalls bewegt sich in den Zustand von , wie Sie beachten.A ( a b c )ca A T.EINT.( c b a )einEINT.
geht jedoch davon aus , Sie von rechts nach links gehen, und wir möchten weiterhin von links nach rechts gehen. Der zweite Trick besteht also darin , den Automaten umzukehren (nicht die Multiplikation, die uns nur zurückbringen würde, wenn wir begonnen hätten), indem alle Pfeile umgekehrt werden, was zu einem nicht deterministischen Automaten , der in der folgenden Übergangstabelle angegeben ist. mit Teilmengen, die durch verkettete Buchstaben angezeigt werden, damit das Huhn nicht zerkratzt, so dass wirklich . (Ich hoffe, ich habe alles richtig gemacht - scheint zu funktionieren).A T R a c { a , c }EINT.EINT.R.a c{ a , c }
EINT.R.einbca bb ca ca b c∅eina b∅ca bca b ca b c∅bbceinb ca ca ba b c∅cceinba ca b cb ca b c∅
Sie können dies als nicht deterministischen Automaten mit nur den drei Zeilen über der Zeile oder als bestimmte Version mit allen 8 Zeilen interpretieren.
Schließlich ist die Maschine das Problem zu lösen das Kreuzproduktautomaten der ursprünglichen und , das ist den Schnittverhalten der beiden Automaten auszuführen (wir nicht brauchen jede Mehr). hat Zustände, die Paare wie . Die Übergangsfunktion führt und unabhängig voneinander aus. Ein einzelner Startzustand geht in unter Eingabe , in unter Eingabe usw. A T R A × A T R A T A × A T R ⟨ a , a c ⟩ A A T R ⟨ 1 , 1 ⟩ ⟨ a , a ⟩ a ⟨ b , b ⟩ bEINEINT.R.A × A.T.R.EINT.A × A.T.R.⟨a,ac⟩AATR⟨1,1⟩⟨a,a⟩a⟨b,b⟩b
Annahme von Zuständen in der nicht-deterministischen Version usw. In der deterministischen Version Annahme Zustände sind Paare , bei denen die erste Komponente ∈ des zweiten Komponentensatzes, wie ⟨ einen , ein ⟩ oder ⟨ b , b c ⟩ .⟨a,a⟩∈⟨a,a⟩⟨ B , b c ⟩
, wie gezeigt vergrößert und bestimmt, hat 25 = 3 ⋅ 8 + 1 Zustände. Verzeihen Sie mir also, wenn ich es nicht im Detail schreibe. Die nicht deterministische Version hat jedoch nur 10 = 3 ⋅ 3 + 1 Zustände.A × A.T.R.25 = 3 ≤ 8 + 110 = 3 ≤ 3 + 1
Wenn L eine reguläre Sprache ist, ist L R , die Sprache, die aus derUmkehrungaller Wörter in L besteht , ebenfalls regulär. Nehmen Sie dies als Übung.( ∗ ) L. L.R. L.
Wie hilft uns das, das Problem zu lösen? Sei die Sprache, die aus allen Zeichenfolgen besteht, die bei der Bewertung von links nach rechts a , b , c ergeben . Die Sprache, die Sie interessiert, ist ( L a ∩ L R a ) ∪ ( L b ∩ L R b ) ∪ ( L c ∩ L R c ) . Dies zeigt, dass, wenn Sie wissen, wie man beweist (L.ein, L.b, L.c a , b , c
Wenn Sie die Idee des Beweises von , können Sie wahrscheinlich einfach den Automaten konstruieren. Betrachten wir das also. Versuchen wir insbesondere, eine NFA für L R a zu erstellen , die Sprache aller Zeichenfolgen, die bei der Auswertung von rechts nach links zu a ausgewertet werden.(∗) LRa a
Die Idee ist dies. Angenommen, der erste Buchstabe, den Sie sehen, ist . Dann muss der Rest der Zeichenfolge zu b ausgewertet werden (da b x = a x = b impliziert ). Ähnliches gilt, wenn der erste Buchstabe c ist . Wenn der erste Buchstabe a , jedoch kann der Rest entweder bewerten a oder b , oder null sein. Mit einer NFA können wir raten (und später unsere Vermutung überprüfen).b b bx=a x=b c a a b
Dieser Hinweis sollte Ihnen genug zum Nachdenken geben und hoffentlich das Problem lösen.
quelle
Süß.
Erstellen Sie zunächst einen Automaten, der das Produkt von links nach rechts berechnet. Einfach! Setzen Sie einen Übergang wann immerx⋅y=z. Es gibt drei Zustände{ → a , → b , → c },die die drei möglichen Produkte darstellen. Beginnen Sie in einem vierten Zustand → 1 mit → 1x→−→yz→ x⋅y=z {a→,b→,c→} 1→ für allex. Der Endzustand istgenau dann → x, wenn das Produkt des Eingabeworts von links nach rechtsx ist.1→−→−xx→ x x→ x
Erstellen wir nun einen Automaten, der das Produkt von rechts nach links berechnet. Dieser wird nicht deterministisch sein. Wie machen wir das? Einfach… Um in die andere Richtung zu gehen, kehren Sie einfach alles um : die Pfeile und die Richtung des Produkts.
Fügen Sie einen getrennten Knoten um das leere Wort zu erhalten. Alle Knoten sind initial.1←
quelle
Es scheint, dass Ihr Hauptproblem darin besteht, Nichtdeterminismus zu verwenden. Lassen Sie mich darauf näher eingehen.
Wie Sie sehen können, kann die NFA jede mögliche Berechnung von unten nach oben erraten und überprüfen . Da die akzeptierte Sprache als der Satz von Zeichenfolgen definiert ist, der von mindestens einem Lauf akzeptiert wird , werden alle nicht akzeptierenden Läufe für die Eingabe ignoriert. Die NFA "rät immer richtig".
Jetzt fällt es dieser NFA leicht, sich bis zum Ende an ihre erste Wahl zu erinnern. Wenn es akzeptiert, kann es das gespeicherte Symbol mit dem parallel erhaltenen lr-Produkt (deterministisch) vergleichen (wie sich die Sprachschnittstelle auf NFA bezieht, wird sicherlich in Ullman / Hopcroft und jedem anderen grundlegenden Lehrbuch behandelt).
quelle