Bei einem DFA A bezeichne L (A) die Anzahl der Wörter, die A akzeptiert. Ich denke, es ist einfach, L (A) zu berechnen: Übersetzen Sie die Codierung von A in einen regulären Ausdruck. Wenn der Kleene-Stern irgendwo im Ausdruck erscheint, ist die Sprache unendlich. Sonst: Gehen Sie alle Wortkombinationen durch, die mit dem Ausdruck möglich sind (wenn der Ausdruck einen + -Operator enthält, multiplizieren Sie die Anzahl der zulässigen Wörter mit der Anzahl der durch das + verbundenen Zeichenfolgen).
Ist das falsch? Danke im Voraus
regular-languages
automata
regular-expressions
user67573
quelle
quelle
Antworten:
Ja, das ist falsch, wegen der Mehrdeutigkeit.
Betrachten Sie die folgende Sprache:( a + a a ) + a ( a + ϵ ) .
Mit Ihrer Methode sehen wir 4 Wörter, . Aber wir haben Duplikate! Es gibt mehrere Möglichkeiten, dasselbe Wort innerhalb des angegebenen regulären Ausdrucks zu bilden.a , a a , a a , a
Eine bessere Methode ist die Verwendung der dynamischen Programmierung auf einem minimalen DFA für Ihre Sprache ohne "tote" Zustände. Wenn der minimale DFA zyklisch ist, ist die Sprache unendlich, sodass wir davon ausgehen können, dass es keine Zyklen gibt. Die Verwendung eines DFA ist der Schlüssel, da der Determinismus bedeutet, dass für jedes Wort genau ein Pfad durch den DFA vorhanden ist.
Sie erstellen eine Wiederholung für die Anzahl der Wörter, die in einem bestimmten Zustand enden:
Die Gesamtzahl der Wörter ist dann die Summe der Anzahl der Wörter, die an jedem Endzustand enden.
quelle
Ergänzend zur Antwort von jmite ist es nicht allzu schwierig, die Anzahl der Wörter in einer regulären Sprache mit der Methode "Übertragungsmatrix" zu berechnen. Dies ist dasselbe wie die dynamische Programmierung von jmite, aber die Technik hat weitere Anwendungen wie die asymptotische Aufzählung.
Konstruieren Sie bei einem gegebenen DFA eine Matrix M (wobei Q die Menge von Zuständen ist), in der M ( i , j ) die Anzahl der Buchstaben ist, die bewirken, dass sich der DFA von Zustand j zu Zustand i bewegt . Sei 1 q 0 und 1 F die Indikatoren für den Anfangszustand bzw. für die akzeptierenden Zustände. Schließlich sei n = | Q | .Q×Q M Q M(i,j) j i 1q0 1F n=|Q|
Die Anzahl der Wörter der Länge beträgt c m : = 1 F M m 1 q 0 . Berechnen Sie c m für 0 ≤ m < 2 n . Wenn c n + ⋯ + c 2 n - 1 > 0 ist, ist die vom DFA akzeptierte Sprache unendlich. Andernfalls beträgt die Anzahl der Wörter in der Sprache c 0 + ⋯ + c n - 1 .m cm:=1FMm1q0 cm 0≤m<2n cn+⋯+c2n−1>0 c0+⋯+cn−1
(Bei der Berechnung der Potenzen von muss auf die Größe der Einträge geachtet werden, die in m exponentiell ist . Da ihre Größe nur polynomisch ist, wird der resultierende Algorithmus in Polynomzeit ausgeführt.)M m
quelle
Tatsächlich können Sie immer noch Zählformeln für eindeutige reguläre Ausdrücke mit Kleene-Sternen ableiten .
In Anbetracht der induktiven Definition eines regulären Ausdrucks als:
Betrachten Sie die folgende Übersetzung ,einen regulären Ausdruck übernimmt und sie in eine komplexwertige rationale Funktion übersetzt:[[ ⋅]] : R e → C (z)
Wir können zeigen, dass diese Übersetzung einen rationalen Ausdruck zurückgibt, indem wir eine strukturelle Induktion für und feststellen, dass alle auf der rechten Seite verwendeten Operationen die Rationalität bewahren.e
Angenommen, der reguläre Ausdruck , den wir eingeben, ist eindeutig, dann würden wir feststellen, dass die mit bezeichnete rationale Funktione ist tatsächlich die Erzeugungsfunktion für die Familie von Wörtern, die von der e zugrunde liegenden Sprache akzeptiert werden, geordnet nach ihrer Länge.[[ e]] ∈ C (z) e
Betrachten Sie zum Beispiel die Sprache , die die Sprache der Läufe eines durch b begrenzten Laufs definiert . Dieser reguläre Ausdruck ist eindeutig, sodass wir unseren Übersetzungstrick ausführen können:( a∗b )∗ ein b
As it turns out, given the above generating function, its coefficient extraction will be
In fact, since our translation[[⋅]] generates rational functions, we can use a partial fraction decomposition to create an enumeration formula for any unambiguous regular expression.
Suppose you have a irreducible rational function
In fact, the partial fraction decomposition generalize to multivariate rational functions, so you can actually construct counting formulas for queries such as "How many words are there where there aren m
a
s andb
s?"Unfortunately, the extent to which this method will be useful ends when you have an ambiguous expression.
quelle