グルシコフ法

グルシコフ法: Glushkov's construction algorithm)、またはベリー・セティ法: Berry-Sethi algorithm)とは、理論計算機科学において正規表現を等価なNFAに変換するアルゴリズムの一つである。

名称は1961年にこのアルゴリズムを提唱したヴィクトル・グルシコフが由来である。

アルゴリズムの解説

対象の正規表現をまず構文木として書き出す。この構文木の節は正規表現の諸規則に従い(正規表現同士の結合推移閉包和集合はまた正規表現)、葉は入力文字セットの要素、つまり文字列を構成する文字を表す。以下の変換ステップはこの構文木に基づいて行われる。

構文木の根から下にある節や葉へと動く点を仮定すると、対象の正規表現が表す文字列が逐次的に生成される。この仮定された点に基づいて、有限オートマトンを構築する。このアルゴリズムの時間計算量 O ( n 2 ) {\displaystyle {\mathcal {O}}(n^{2})} である。

変換ステップ

  1. 構文木のすべての節 r {\displaystyle r} において、節に属する述語 e m p t y [ r ] {\displaystyle empty[r]} を求める。このステップは後行順のDFSで実現可能である。
  2. 構文木のすべての節 r {\displaystyle r} において、節に属する集合 f i r s t [ r ] {\displaystyle first[r]} を求める。このステップは後行順のDFSで実現可能である。
  3. 構文木のすべての節 r {\displaystyle r} において、節に属する集合 n e x t [ r ] {\displaystyle next[r]} を求める。このステップは先行順のDFSで実現可能である。
  4. 構文木のすべての節 r {\displaystyle r} において、節に属する集合 l a s t [ r ] {\displaystyle last[r]} を求める。このステップは後行順のDFSで実現可能である。
  5. 最後に次のようにまとめる:
    1. 構築するオートマトンの状態の集合は { e } { i i is leaf } {\displaystyle \{\bullet e\}\cup \{i\bullet \mid {\mbox{i is leaf}}\}}
    2. オートマトンの初期状態は e {\displaystyle \bullet e}
    3. オートマトンの終了状態は
      1. l a s t [ e ] {\displaystyle last[e]} , if e m p t y [ e ] = f a l s e {\displaystyle empty[e]=false} and
      2. { e } l a s t [ e ] {\displaystyle \{\bullet e\}\cup last[e]} , if e m p t y [ e ] = t r u e {\displaystyle empty[e]=true}
    4. オートマトンの状態遷移関数は
      1. ( e , a , i ) {\displaystyle (\bullet e,a,i\bullet )} , if i f i r s t [ e ] {\displaystyle i\in first[e]} and i {\displaystyle i} is marked with a {\displaystyle a} , and
      2. ( i , a , i ) {\displaystyle (i\bullet ,a,i'\bullet )} , if i n e x t [ i ] {\displaystyle i'\in next[i]} and i {\displaystyle i'} is marked with a {\displaystyle a} .

記号 {\displaystyle \bullet } は構文木を動き回る点を表す。結果として生成されたオートマトンは多くの場合非決定的であるが、部分集合構成法により決定性をもたせることができる。

参考文献

  • Gérard Berry, Ravi Sethi: From regular expressions to deterministic automata. In: Theoretical Computer Science. 48, 1986, ISSN 0304-3975, S. 117–126.
  • Viktor M. Glushkov: The abstract theory of automata. In: Russian Mathematical Surveys. 16, 1961, ISSN 0036-0279, S. 1–53.