Ich habe versucht, den Brzozowski-Algorithmus zu implementieren, aber ich habe gerade festgestellt, dass er suboptimale Automaten für eine bestimmte Klasse von Eingaben erstellt und einen Status mehr hat, als im Ergebnis wirklich benötigt wird. Ich kann es auf einem trivialen Automaten zeigen:
a b a b a b a b a b
>0 0 1 rev *0 0,2 - det >0 - 1 rev *0 - - det >0 1 2
1 1 2 --> 1 1 0 --> 1 2 5 --> 1 - 0,4 --> 1 1 2
*2 0 2 >2 - 1,2 2 2 3 2 1,2 - 2 2 3
*3 4 - 3 - 2 *3 1 3
*4 4 1 4 3,4 -
*5 5 5 5 5 1,5
>6 3,4,5 1,2,5
Hier ist rev der Randumkehrteil , in dem ich bereits die Übergänge auf epsilon entfernt hatte, und det ist die Determinierung durch Powerset-Konstruktion, die rekursiv neue Zustände erzeugt, sobald sie entdeckt werden.
Das Problem hierbei ist folgendes: Wenn ich den zusätzlichen Zustand hinzufüge, um die drei verschiedenen Startzustände nach der ersten Kantenumkehr und der Powerset-Konstruktion auszugleichen, kehrt nichts mehr in diesen Zustand zurück, und daher kann ich ihn später nicht mehr entfernen, weil ich gleichwertig bin auf den ursprünglichen Startzustand.
Stimmt etwas nicht mit der Art und Weise, wie ich es mache? Vermisse ich etwas
quelle