
コンピュータサイエンスにおいて、決定性非巡回有限状態オートマトン(DAFSA)[ 1 ] は、文字列の集合を表すデータ構造であり、与えられた文字列がその集合に属するかどうかをその長さに比例した時間でテストするクエリ操作を可能にする。このようなオートマトンを構築し、維持するためのアルゴリズムが存在する[ 1 ] 。DAFSAは、有向非巡回ワードグラフ(DAWG) [ 2 ]と呼ばれるデータ構造の再発見であるが、同じ名前はサフィックスオートマトンに関連する別のデータ構造に既に与えられていた[ 3 ]。
DAFSAは、有向非巡回グラフの形をとる有限状態認識器の特殊なケースであり、単一のソース頂点(入ってくる辺を持たない頂点)を持ち、グラフの各辺は文字または記号でラベル付けされ、各頂点は各文字または記号に対して最大で1つの出ていく辺を持つ。DAFSAによって表現される文字列は、ソース頂点から任意のシンク頂点(出ていく辺を持たない頂点)までのグラフ上のパス上の記号によって形成される。実際、決定性有限状態オートマトンが非巡回的であるためには、有限の文字列集合を認識する必要がある。[ 1 ]
Blumerら[ 3 ]は1983年に初めて有向非巡回ワードグラフ(DAWG)という用語を定義しました。AppelとJacobsen [ 2 ]は1988年に別のデータ構造に同じ名前を使用しました。それ以前の研究とは独立して、Daciukら[ 1 ]は2000年に後者のデータ構造を再発見しましたが、DAFSAと呼びました
DAFSAは、同じ頂点に複数のパスで到達できるようにすることで、強く関連するトライデータ構造よりも大幅に少ない頂点数で済みます。例えば、英語の4つの単語「tap」、「taps」、「top」、「tops」を考えてみましょう。これらの4つの単語のトライは12個の頂点を持ち、これらの単語の接頭辞として形成される文字列、または文字列終了マーカーが続く単語のそれぞれに1つずつ割り当てられます。しかし、DAFSAは、同じ4つの単語を、0 ≤ i ≤ 5の6つの頂点v i と、以下の辺のみで表現できます。v 0 からv 1へ の「t」ラベルの辺、v 1 からv 2 への「a」および「o」ラベルの2つの辺 、v 2からv 3への「p 」ラベルの辺、 v 3からv 4への「s」ラベルの辺、そしてv 3とv 4からv 5への「文字列終了マーカー」ラベルの辺です。メモリと機能性の間にはトレードオフがあります。標準の DAFSA では単語が存在するかどうかはわかりますが、その単語に関する補助情報を示すことはできません。一方、トライではそれが可能です。
DAFSAとトライ構造の主な違いは、文字列の保存時に接尾辞と中接辞の冗長性が排除される点です。トライ構造では、共通の接頭辞がすべて文字列間で共有されるため、接頭辞の冗長性が排除されます。例えば、「doctors」と「doctorate」では、 「doctor」という接頭辞が共有されます。DAFSAでは、接尾辞の可能な集合が同じ単語同士で共通の接尾辞も共有されます。一般的な英語の単語の辞書セットでは、これはメモリ使用量の大幅な削減につながります。
DAFSAの末端ノードには複数のパスで到達できるため、DAFSAは各パスに関連する補助情報(例えば、英語における単語の出現頻度など)を直接格納することはできません。しかし、各ノードについて、その点を通過する一意のパスの数を構造に格納すれば、単語のインデックス、あるいはインデックスが与えられた単語を取得することができます。[ 4 ]補助情報は配列に格納できます。