2

単純な正規表現のリストがあります。

ABC.+DE.+FHIJ.+
.+XY.+Z.+AB
.+KLM.+NO.+J.+
QRST.+UV

それらはすべて。+の交互のパターンを持ち、いくつかのテキスト(私は「単語」と呼びます)が数回繰り返されます。パターンは、。+で開始または終了しない場合があります。これらの正規表現はすべて相互に排他的です。別の正規表現が追加されたら、一致する他の正規表現をすべて削除し、追加された正規表現とそのすべての一致を組み合わせた正規表現を1つ追加します。たとえば、次を追加します。

.+J.+ 

一致するだろう、

ABC.+DE.+FHIJ.+
.+KLM.+NO.+J.+

したがって、これらは削除され、追加された正規表現に置き換えられ、次のようになります。

.+J.+ 
.+XY.+Z.+AB
QRST.+UV

これらのパターンを何らかのデータ構造に保存するか、(できれば)データベースに効率的に保存する必要があります。私は最初に辞書のツリーを試しましたが、正規表現が。*で始まる場合は、ツリー全体で次の単語、つまり順序​​O(2 ^ n)を検索する必要があることに気付きました。残念ながら、(私が間違っていない限り)SQLite(私が使用している)も私が使用した他のリレーショナルデータベースも、データ型として「正規表現」をサポートしていないようです。私の質問は、そのような単純な正規表現を格納および取得するための効率的な方法はありますか?固定された方法がない場合、比較的効率的なデータ構造はありますか(たとえば、最悪の場合、償却された多項式時間)?

4

1 に答える 1

0

これらの正規表現を何に使用しているのか説明していただけますか? 特に、正規表現を分割する方法を見ると、Trieまたは有向非巡回ワード グラフの方が適しているかどうか疑問に思います。

それらから、あなたの答えは、より良い正規化を提供するか、問題領域専用に作成された代替のSQLデータベースを見つけるのと同じくらい簡単であることがわかります.

于 2012-08-01T02:26:31.803 に答える