Wie komplex ist die Zeichenfolgenlänge, die für einen Vergleich regulärer Ausdrücke für eine Zeichenfolge erforderlich ist?
Wie komplex ist die Zeichenfolgenlänge, die für einen Vergleich regulärer Ausdrücke für eine Zeichenfolge erforderlich ist?
Antworten:
Die Antwort hängt davon ab, was Sie genau unter "regulären Ausdrücken" verstehen. Klassische Regexes kann kompiliert in deterministischen Finite Automata , die eine Zeichenfolge der Länge entsprechen können N
in der O(N)
Zeit. Bestimmte Erweiterungen der Regex-Sprache ändern dies zum Schlechten.
Möglicherweise finden Sie das folgende Dokument von Interesse: Der Abgleich regulärer Ausdrücke kann einfach und schnell sein .
unbegrenzt - Sie können einen regulären Ausdruck, der niemals endet, in einer leeren Eingabezeichenfolge erstellen.
Wenn Sie nach engen asymptotischen Grenzen für RegEx suchen (ohne Rücksicht auf den Ausdruck selbst), gibt es keine. Wie Alex betont, können Sie einen regulären Ausdruck erstellen, der O (1) ist, oder einen regulären Ausdruck, der Omega (unendlich) ist. Als rein mathematischer Algorithmus wäre eine Engine für reguläre Ausdrücke viel zu kompliziert, um irgendeine formale asymptotische Analyse durchzuführen (abgesehen von der Tatsache, dass eine solche Analyse grundsätzlich wertlos wäre).
Die Wachstumsrate eines bestimmten Ausdrucks (da dies ohnehin einen Algorithmus darstellt) wäre weitaus aussagekräftiger, wenn auch nicht unbedingt einfacher zu analysieren.