Wie komplex ist die Zeichenfolgenlänge, die für einen Vergleich regulärer Ausdrücke für eine Zeichenfolge erforderlich ist?
regex
complexity-theory
big-o
Ahmad Farid
quelle
quelle
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 derO(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 .
quelle
unbegrenzt - Sie können einen regulären Ausdruck, der niemals endet, in einer leeren Eingabezeichenfolge erstellen.
quelle
Wenn Sie normales (TCS: keine Rückreferenz, Verkettung, Wechsel, Kleene-Stern) Regexp verwenden und Regexp bereits kompiliert ist, ist es O (n).
quelle
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.
quelle