web-dev-qa-db-ja.com

正規表現の複雑さは何ですか?

文字列で正規表現比較を実行するのにかかる文字列の長さに関する複雑さは何ですか?

65
Ahmad Farid

答えは、「正規表現」の正確な意味に依存します。古典的な正規表現は コンパイル済み決定論的有限オートマトン にすることができ、O(N)時間のNの長さの文字列に一致します。正規表現言語の特定の拡張機能により、さらに悪化します。

興味のある次のドキュメントを見つけることができます: 正規表現のマッチングは簡単で高速です

58
NPE

無制限-空の入力文字列で、終了しない正規表現を作成できます。

9
Alex Brown

通常の(TCS:後方参照、連結、代替、Kleeneスターなし)正規表現を使用し、正規表現が既にコンパイルされている場合、O(n)になります。

6
royas

RegExの厳密な漸近的境界を探している場合(式自体に関係なく)、存在しません。 Alexが指摘するように、O(1)である正規表現またはOmega(infinity)である正規表現を作成できます。純粋に数学的なアルゴリズムとして、正規表現エンジンは非常に複雑になりますあらゆる種類の形式的な漸近解析を実行する(このような解析は基本的に価値がないという事実は別として)。

特定の式の成長率(とにかく、実際にはアルゴリズムを構成しているため)は、はるかに意味がありますが、必ずしも分析が容易ではありません。

0
Adam Robinson