Gibt es bei zwei beliebigen regulären Ausdrücken einen "effizienten" Algorithmus, um festzustellen, ob sie mit demselben Satz von Zeichenfolgen übereinstimmen?
Können wir allgemeiner die Größe des Schnittpunkts der beiden Übereinstimmungssätze berechnen?
Welche Algorithmen gibt es dafür und in welcher Komplexitätsklasse leben sie?
Wenn wir den Kleene-Stern nicht zulassen, ändert das überhaupt das Bild?
algorithms
regular-expressions
MathematicalOrchid
quelle
quelle
Antworten:
Hendrik Jan gibt eine gute Antwort für die Komplexitätsklasse, aber keinen Algorithmus selbst.
Der einfachste Algorithmus, den ich kenne, besteht darin, den regulären Ausdruck in einen DFA zu konvertieren. Es sind Techniken bekannt, um einen regulären Ausdruck in einen NFA und einen NFA in einen DFA umzuwandeln.
Sobald Sie zwei DFAs haben, ist das Testen auf Äquivalenz effizient und entscheidbar, da die Minimalform eines DFA bis zum Isomorphismus eindeutig ist.
Das Erstellen dieser DFAs aus NFAs kann jedoch viel Zeit in Anspruch nehmen und extrem große DFAS erzeugen, die im schlimmsten Fall exponentiell groß sind.
quelle
Es ist bekannt, dass die Gleichwertigkeit regulärer Ausdrücke PSPACE-vollständig ist, was ziemlich schlecht ist. Das Papier "Komplexität von Entscheidungsproblemen für einfache reguläre Ausdrücke" listet mehrere Unterklassen regulärer Ausdrücke mit ihrer jeweiligen Komplexität auf. ( Link )
quelle