Was ist die minimale Pumplänge für die folgenden Sprachen?
(01)*
10(11*0)*0
1011
011
U 0*1*
Hier sind meine Lösungen. Bitte korrigieren Sie mich, wenn ich falsch liege.
01
die kürzeste Zeichenfolge ist, die gepumpt werden kann 10100
die kürzeste Zeichenfolge ist, die gepumpt werden kann 0
gepumpt werden kann Ich bin mir über meine Antworten nicht sicher, daher wird jede Hilfe geschätzt. Vielen Dank!
Ich denke, dass die Antwort von Simon vielleicht etwas daneben ist. Sie müssen in der Tat einen Zyklus irgendwo nehmen. Das Pumping-Lemma erfordert, dass der Pfad, der zum Erkennen der Zeichenkette benötigt wird, einen Zyklus umfasst (dies ist das "y" des Pump-Lemmas "xyz"). Wir können diesen Zyklus so oft machen, wie wir wollen, was die Kette pumpt.
Laut Patrick87 ist die minimale Pumplänge definiert als die maximale Anzahl von Übergängen, die Sie in einem minimierten DFA ausführen können, ohne einen Status zweimal zu besuchen. Der Prozess wandelt dann Ihren regulären Ausdruck in einen NFA um, konvertiert den NFA in einen DFA, minimiert den DFA und zählt den längsten Pfad entlang der gerichteten Kanten, ohne denselben Status zweimal zu verwenden. Für eine Einführung in diese Umwandlung und Minimierung, siehe zum Beispiel Torben Mogensens freies Buch, Grundlagen des Compiler Designs Kapitel 2.6, 2.8.
Gemäß dieser Definition
(01)*
hat zwei Zustände, und Sie können nur einen Übergang durchführen, ohne den ursprünglichen, akzeptierenden Zustand zu erreichen. 10(11*0)*0
hat einen Status, der zweimal besucht werden muss, damit der Unterausdruck (11*0)*
Teil der Ableitung ist. 1011
hat genau 4 Kanten und keine Rekursion. 011
ist eine Teilmenge der Sprache 0*1*
, also 011
U 0*1*
= 0*1*
. Und da weder 0
noch 1
gepumpt werden können, kann man nur einer nicht-rekursiven Kante folgen. Tags und Links computer-science compiler-theory computation-theory regular-language