| サフィックスオートマトン | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| タイプ | 部分文字列インデックス | ||||||||||||||
| 発明された | 1983 | ||||||||||||||
| 発明者 | アンセルム・ブルマー。ジャネット・ブルーマー。アンジェイ・エーレンフォイヒト;デヴィッド・ハウスラー;ロス・マッコーネル | ||||||||||||||
| |||||||||||||||
コンピュータサイエンスにおいて、サフィックスオートマトンとは、特定の文字列の部分文字列インデックスを表す効率的なデータ構造であり、その部分文字列すべてに関する圧縮された情報の保存、処理、および取得を可能にします。文字列のサフィックスオートマトンとは、専用の初期頂点と一連の「最終」頂点を持つ最小の有向非巡回グラフであり、初期頂点から最終頂点までのパスが文字列のサフィックスを表します。
オートマトン理論の観点では、サフィックス オートマトンとは、与えられた文字列のサフィックスの集合を認識する最小限の部分的な決定論的有限オートマトンです。サフィックス オートマトンの状態グラフは、有向非巡回ワード グラフ (DAWG) と呼ばれ、この用語は、決定論的非巡回有限状態オートマトンにも使用されることがあります。
サフィックスオートマトンが1983年にデンバー大学とコロラド大学ボルダー校の科学者グループによって導入された。彼らはその構築に線形時間 オンラインアルゴリズムを提案し、少なくとも2文字の長さを持つ文字列のサフィックスオートマトンが最大で 状態と遷移を持つことを示した。その後の研究でサフィックスオートマトンとサフィックスツリーの間に密接な関係があることが示され、単一の出力アークを持つノードを圧縮することで得られる圧縮サフィックスオートマトンなど、サフィックスオートマトンに関するいくつかの一般化が概説された。
サフィックスオートマトンでは、部分文字列の検索や2 つ以上の文字列の 最大共通部分文字列の計算などの問題に対して効率的なソリューションが提供されます。
歴史

サフィックスオートマトンの概念は、1983年にデンバー大学とコロラド大学ボルダー校のアンセルム・ブルーマー、ジャネット・ブルーマー、アンジェイ・エーレンフォイヒト、デイヴィッド・ハウスラー、ロス・マッコーネルからなる科学者グループによって導入されました。ただし、同様の概念は、サフィックスツリーと並んでピーター・ワイナー[2] 、ヴォーン・プラット[3]、アナトール・スリセンコ[4]の研究で以前に研究されていました。最初の研究で、ブルーマーらは、最大で状態と遷移を持つよりも長い文字列用に構築されたサフィックスオートマトンを示し、オートマトン構築のための線形アルゴリズムを提案しました。 [5]
1983年、Mu-Tian ChenとJoel Seiferasはそれぞれ独立に、Weinerの1973年の接尾辞木構築アルゴリズム[2]が、文字列の接尾辞木を構築する際に、逆順にした文字列の接尾辞オートマトンを補助構造として構築することを示した。 [6] 1987年、Blumerらは接尾辞木で使用される圧縮技術を接尾辞オートマトンに適用し、圧縮接尾辞オートマトンを発明した。これは、圧縮有向非巡回単語グラフ(CDAWG)とも呼ばれる。[7] 1997年、Maxime CrochemoreとRenaud Vérinは、直接CDAWG構築のための線形アルゴリズムを開発した。[1] 2001年、Shunsuke Inenagaらは、トライによって与えられた単語の集合に対してCDAWGを構築するアルゴリズムを開発した。[8]
定義
通常、サフィックスオートマトンと関連する概念について話すときは、形式言語理論とオートマトン理論の概念が使われます。特に[9]
- 「アルファベット」は単語を構成するのに使用される有限の集合 です。その要素は「文字」と呼ばれます。
- 「単語」は有限の文字列です。単語の「長さ」は次のように表されます。
- 「形式言語」とは、特定のアルファベットによる単語の集合です。
- 「すべての単語の言語」は(「*」文字はクリーネ星を表す)として表され、「空の単語」(長さがゼロの単語)は 文字 で表されます。
- 「単語の連結」と はまたは と表され、の右側にと書いて得られる単語、つまり に対応します。
- 「言語の連結」はまたはとして表され、ペアワイズ連結の集合に対応します。
- 単語が ( )と表される場合、単語 、、はそれぞれ単語の「接頭辞」、「接尾辞」、および「サブワード」(部分文字列)と呼ばれます。
- および(と共に)の場合、 はサブワードとしてに「出現」すると言われます。ここで、 と はそれぞれにおけるの出現の左位置と右位置と呼ばれます。
オートマトン構造
正式には、決定性有限オートマトンは次の5組 によって決定される。[10]
- 単語を構成するのに使われる「アルファベット」です。
- オートマトン「状態」の集合であり、
- オートマトンの初期状態である。
- オートマトンにおける「最終」状態の集合である。
- は、オートマトンの部分的な「遷移」関数であり、に対しては未定義であるか、文字 からへの遷移を定義します。
最も一般的には、決定性有限オートマトンは次の有向グラフ(「ダイアグラム」)として表現される: [10]
- グラフの頂点の集合は状態の状態に対応し、
- グラフには初期状態に対応する特定のマークされた頂点があり、
- グラフには、最終状態の集合に対応するいくつかのマークされた頂点があります。
- グラフ弧の集合は遷移の集合に対応する。
- 具体的には、すべての遷移はからへの円弧で表され、 という文字で示されます。この遷移は と表記されることもあります。
図で言えば、オートマトンが単語を認識するのは、最初の頂点から最後の頂点までのパスが存在し、このパス上の文字の連結が を形成する場合のみです。オートマトンによって認識される単語の集合は、オートマトンによって認識されるように設定された言語を形成します。これらの用語では、 の接尾辞オートマトンによって認識される言語は、その(空の可能性のある)接尾辞の言語です。[9]
オートマトンの状態
言語に関する単語の「右文脈」とは、 との連結がから単語を形成するような単語の集合である。右文脈は、すべての単語の集合に自然な同値関係を誘導する。言語が何らかの決定論的有限オートマトンによって認識される場合、同じ言語を認識し、状態数が最小となる唯一の同型オートマトンが存在する。このようなオートマトンを、与えられた言語に対する最小オートマトンと呼ぶ。マイヒル・ネローデ定理により、右文脈に関してこれを明示的に定義することができる。[11] [12]
定理 — アルファベット上の言語を認識する最小オートマトンを次のように明示的に定義できます。
- アルファベットは同じまま、
- 状態はすべての可能な単語の正しい文脈に対応し、
- 初期状態は空語の右文脈に対応し、
- 最終状態は、の単語の正しい文脈に対応します。
- 遷移はによって与えられ、ここでおよび です。
これらの用語では、「接尾辞オートマトン」は、単語 の接尾辞の言語を認識する最小の決定論的有限オートマトンです。この言語に関する単語 の右コンテキストは、 がの接尾辞である単語 で構成されています。これにより、単語 の右コンテキストと におけるその出現の右位置の集合との間の一対一性を定義する次の補題を定式化できます。[ 13] [14]
定理 — におけるの出現の正しい位置の集合を とします。
と の間には次の一対一の関係があります。
- もしならば;
- もしならば。
たとえば、単語とそのサブワードについては、および が成り立ちます。非公式には、はの出現に続く の終わりまでの単語によって形成され、 はそれらの出現の右側の位置によって形成されます。この例では、要素 は単語 に対応し、単語 は要素 に対応します。
これはサフィックスオートマトンの状態のいくつかの構造特性を意味する。とすると、次のようになる。[14]
- と に少なくとも 1 つの共通要素 がある場合、 とにも共通要素があります。これは、 が の接尾辞であり、したがって であることを意味します。前述の例では、であるため、はの接尾辞であり、したがってであり です。
- の場合、はの接尾辞としてのみに現れます。たとえば、 および の場合、およびが成り立ちます。
- および がとなるの接尾辞である場合、 となります。上記の例では、 および の「中間」接尾辞に対して となります。
サフィックスオートマトンの状態はいずれも、その状態によって認識される最長の単語のネストされたサフィックスの連続した連鎖を認識する。 [14]
文字列の「左拡張」は、 と同じ右コンテキストを持つ最長の文字列です。によって認識される最長文字列の長さはで表されます。これは次の式を満たします。[15]
定理 — の左拡張はと表すことができます。ここで、 はにおけるの出現の前に が来る最長の単語です。
状態の「サフィックス リンク」は、によって認識されないの最大のサフィックスを含む状態へのポインタです。
この用語では、 はより長くより長くないの接尾辞を正確にすべて認識すると言えます。また、次の式も成り立ちます: [15]
定理 — サフィックス リンクは、次のように明示的に定義できる ツリーを形成します。
接尾辞木との接続

「プレフィックス ツリー」(または「トライ」)は、ルート付き有向ツリーで、そのツリーの頂点には同じ文字でマークされた 2 つの出力アークが存在しないような方法でアークが文字でマークされます。トライのいくつかの頂点は最終としてマークされます。トライは、ルートから最終頂点までのパスによって定義される単語のセットを認識すると言われています。このように、プレフィックス ツリーは、ルートを最初の頂点として認識する場合、特別な種類の決定論的有限オートマトンです。[16]単語の「サフィックス トライ」は、そのサフィックスのセットを認識するプレフィックス ツリーです。「サフィックス ツリー」は、サフィックス トライから圧縮手順によって取得されるツリーで、その間の頂点の次数が 2 に等しい場合は、後続のエッジがマージされます。[15]
定義によれば、サフィックスオートマトンはそのサフィックストライの最小化によって得られる。圧縮されたサフィックスオートマトンが、サフィックスツリーの最小化(サフィックスツリーの端にある各文字列がアルファベットの実文字であると仮定した場合)とサフィックスオートマトンの両方によって得られることが示される。[17]サフィックスツリーと同じ文字列のサフィックスオートマトンとの間のこの接続に加えて、文字列のサフィックスオートマトンと逆順の文字列のサフィックスツリーとの間の接続もある。[18]
右コンテキストと同様に、「左コンテキスト」、つまり、 と同じ左コンテキストを持つ最長の文字列に対応する「右拡張」と同値関係を導入することができる。文字列の「接頭辞」の言語に関して右拡張を考慮すると、次のようになる。[15]
定理 — 文字列の接尾辞ツリーは、次のように明示的に定義できます。
- 木の頂点はすべての部分文字列の右拡張に対応し、
- 辺は、および となる三つ組に対応します。
ここでトリプレットとは、文字列が書かれた エッジがからにあることを意味します。
これは文字列の接尾辞リンク木と文字列の接尾辞木が同型であることを意味する:[18]
左拡張の場合と同様に、右拡張についても次の補題が成り立つ: [15]
定理 — 文字列の右拡張はとして表すことができます。ここで、 は内のすべての出現の後に が続く最長の単語です。
サイズ
長さの文字列の接尾辞オートマトンには、最大で個の状態と最大で 個の遷移があります。これらの境界は、文字列とそれぞれで到達されます。[13]これは、より厳密に次のように定式化できます。ここで、と は、それぞれオートマトン内の遷移と状態の数です。[14]
工事
当初、オートマトンには空の単語に対応する単一の状態のみが含まれており、その後文字列の文字が1つずつ追加され、オートマトンが各ステップで段階的に再構築されます。[19]
州の最新情報
文字列に新しい文字が追加されると、いくつかの同値類が変更されます。接尾辞の言語に関しての正しいコンテキストを とします。が追加された後のから への遷移は、補題[14]によって定義されます。
定理 — を 上のいくつかの単語とし、をこのアルファベットのいくつかの文字とします。このとき、 との間には次の対応関係があります。
- が;の接尾辞である場合
- さもないと。
現在の単語にを追加した後、が の接尾辞である場合に限り、の右コンテキストが大幅に変化する可能性があります。これは、同値関係 がの改良であることを意味します。言い換えると、の場合、 です。新しい文字を追加した後、 の最大 2 つの同値クラスが分割され、それぞれが最大 2 つの新しいクラスに分割される場合があります。まず、空の右コンテキストに対応する同値クラスは常に 2 つの同値クラスに分割され、そのうちの 1 つはそれ自体に対応し、右コンテキストとして を持ちます。この新しい同値クラスには、 と に出現しなかったそのすべての接尾辞が正確に含まれます。これは、そのような単語の右コンテキストが以前は空であり、現在は空の単語のみが含まれているためです。[14]
サフィックスオートマトンの状態とサフィックスツリーの頂点との対応関係が与えられれば、新しい文字が追加された後に分岐する可能性のある2番目の状態を見つけることができる。 から への遷移は、反転された文字列における からへの遷移に対応する。サフィックスツリーの観点では、これは新しい最長サフィックスをのサフィックスツリーに挿入することに対応する。この挿入後に形成される新しい頂点は最大で2つであり、そのうちの1つは に対応し、もう1つは分岐があった場合はその直接の祖先に対応する。サフィックスオートマトンに戻ると、これは最初の新しい状態が を認識し、2番目(2番目の新しい状態がある場合)がそのサフィックスリンクであることを意味する。これは補題として述べることができる:[14]
定理 — を 上の単語と文字とします。また、に出現する の最長接尾辞を とし、 とします。すると、の任意の部分文字列に対して以下が成立します。
- かつならば、;
- かつならば、;
- かつならば。
これは、(例えば、がにまったく出現せず、 )の場合、空の右コンテキストに対応する同値クラスのみが分割されることを意味します。 [14]
接尾辞リンクの他に、オートマトン の最終状態を定義する必要もあります。構造特性から、によって認識される単語のすべての接尾辞は、の接尾辞パス上のいずれかの頂点によって認識されることがわかります。つまり、 より大きい長さの接尾辞は にあり、 より大きいが より大きくない接尾辞はにあり、などとなります。したがって、 を認識する状態が で表される場合、すべての最終状態 (つまり、 の接尾辞を認識する状態) は、シーケンス を形成します。[19]
遷移と接尾辞リンクの更新
文字 がに追加されると、接尾辞オートマトンの新しい状態として、および が考えられます。 からの接尾辞リンクは に、 から はに変わります。 からの単語は では接尾辞としてのみ出現するため、 から への遷移はまったく発生しませんが、 への遷移は、少なくとも の長さを持ち、文字 でマークされた の接尾辞から発生する必要があります。 状態はのサブセットによって形成されるため、からの遷移は からの遷移と同じになります。 一方、 につながる遷移は、未満で少なくとも の長さを持つの接尾辞から発生する必要があります。これは、そのような遷移が以前に につながり、この状態の分離部分に対応しているためです。 これらの接尾辞に対応する状態は、 の接尾辞リンクパスのトラバースによって決定できます。[19]
構築アルゴリズム
上記の理論的結果から、文字を取り、の接尾辞オートマトンをの接尾辞オートマトンに再構築する次のアルゴリズムが導かれる。[19]
- 単語に対応する状態は次のように保持されます。
- が追加された後、 の以前の値が変数に格納され、自体が に対応する新しい状態に再割り当てされます。
- の接尾辞に対応する状態は、への遷移によって更新されます。これを行うには、 による遷移がすでにある状態になるまで、を通過する必要があります。
- 前述のループが終了すると、次の 3 つのケースが考えられます。
- 接尾辞パス上のいずれの状態にも による遷移がなかった場合、 は以前に では発生せず、 からの接尾辞リンクは につながるはずです。
- による遷移が見つかり、状態 から状態 へ遷移して となる場合、 は分割する必要はなく、 の接尾辞リンクになります。
- 遷移が見つかったが の場合、最大で長さを持つからの単語は、新しい「クローン」状態 に分離される必要があります。
- 前のステップが の作成で完了した場合、 からの遷移とその接尾辞リンクは の遷移をコピーする必要があり、同時に はと の両方の共通接尾辞リンクに割り当てられます。
- 以前につながったが、最大で の長さの単語に対応する遷移は にリダイレクトされます。これを行うには、からの による遷移が につながらない状態が見つかるまで、の接尾辞パスを通過し続けます。
全体の手順は次の疑似コードで記述される: [19]
関数 add_letter(x) : p = lastと定義します。 last = new_state()を割り当てます。 len(last) = len(p) + 1 を割り当てます。 δ(p, x)が未定義の場合: δ(p, x) = last、p = link(p) を割り当てます。 q = δ(p, x)と定義します。 q = lastの場合: link(last) = q 0を割り当てます。len(q) = len(p) + 1 の場合: link(last) = qを割り当てます。そうでない場合: cl = new_state() と定義します。 len(cl) = len(p) + 1を割り当てます。δ(cl) = δ(q)、link(cl) = link(q) を割り当てます。 δ(p, x) = qの場合: δ(p, x) = cl、p = link(p)を割り当てます。
ここで はオートマトンの初期状態であり、 は新しい状態を作成する関数です。、、はグローバル変数として格納されていると仮定します。[19]
複雑
アルゴリズムの複雑さは、オートマトンの遷移を格納するために使用される基礎構造によって異なる場合があります。メモリ割り当てが で行われると仮定すると、メモリ オーバーヘッドを伴うで実装することも、メモリ オーバーヘッドを伴うで実装することもできます。このような複雑さを得るには、償却分析の方法を使用する必要があります。 の値は、サイクルの各反復で厳密に減少しますが、サイクルの最初の反復の後に次のadd_letter呼び出しで最大 1 だけ増加する場合があります。 の全体的な値はを超えることはなく、新しい文字を追加する の反復間で 1 だけ増加します。これは、全体の複雑さも最大で線形であることを示唆しています。2 番目のサイクルの線形性も同様に示されます。[19]
一般化
サフィックスオートマトン(接尾辞オートマトン)は、他のサフィックス構造や部分文字列インデックスと密接に関連しています。特定の文字列のサフィックスオートマトンが与えられた場合、圧縮と再帰的トラバーサルによって線形時間でサフィックスツリーを構築できます。[20]のサフィックスオートマトンと反転した文字列のサフィックスツリーを切り替えるために、同様の変換が両方向に可能です。 [18]これ以外にも、トライによって与えられた文字列の集合のオートマトンを構築するためのいくつかの一般化が開発されました。[8 ] 圧縮サフィックスオートメーション(CDAWG)[7]スライディングウィンドウ上でオートマトンの構造を維持するため、[21]双方向でオートマトンを構築し、文字列の先頭と末尾の両方に文字を挿入できるようにしました。[22]
短縮サフィックスオートマトン
すでに述べたように、圧縮サフィックスオートマトンは通常のサフィックスオートマトンを圧縮すること(非最終的でちょうど 1 つの出力アークを持つ状態を削除することによって)とサフィックスツリーを最小化することによって得られます。通常のサフィックスオートマトンと同様に、圧縮サフィックスオートマトンの状態は明示的に定義できます。単語の双方向拡張は 、内のすべての出現の前に が、後に が続くような最長の単語 です。左拡張と右拡張の観点から見ると、双方向拡張は右拡張の左拡張、または同等に左拡張の右拡張、つまり であることを意味します。双方向拡張の観点から、圧縮オートマトン は次のように定義されます。[15]
定理 — 単語の圧縮接尾辞オートマトンがペアによって定義されます。ここで、
- オートマトン状態の集合です。
- オートマトン遷移のセットです。
双方向拡張は、コンパクトオートマトンが同じ状態であると認識する単語の集合を定義する同値関係を誘導します。 この同値関係はによって定義される関係の推移閉包であり、関係 (サフィックスツリーの最小化)を介して同値な接尾辞ツリーの頂点を接着することと、関係 (サフィックスオートマトンをコンパクト化)を介して同値な接尾辞オートマトンの状態を接着することによってコンパクトオートマトンが得られるという事実を強調しています。[23]単語と が同じ右拡張を持ち、単語と が同じ左拡張を持つ場合、累積的にすべての文字列、および は同じ双方向拡張を持ちます。 同時に、 と の左拡張も右拡張も一致しない場合があります。例として、 、およびを取り、その左拡張と右拡張が次のとおりであるものとします。 、ですが、および。そうは言っても、一方向拡張の同値関係はネストされたプレフィックスまたはサフィックスの連続したチェーンによって形成されるのに対し、双方向拡張の同値関係はより複雑であり、確実に結論付けられることは、同じ双方向拡張を持つ文字列は同じ双方向拡張を持つ最長文字列の部分文字列であるということだけですが、空でない部分文字列が共通に存在しないことさえあります。この関係の同値類の総数は を超えず、これは長さ の文字列の圧縮サフィックスオートマトンが最大で の状態を持つことを意味します。このようなオートマトンにおける遷移の量は最大で です。[15]
複数の文字列の接尾辞オートマトン
単語の集合 を考えてみましょう。集合に含まれるすべての単語の接尾辞によって形成される言語を認識する接尾辞オートマトンを一般化して構築することができます。 を と置くと、このようなオートマトンの状態と遷移の数の制約は、単一単語オートマトンの場合と同じままになります。[23]このアルゴリズムは、状態 の代わりに、関数add_letter が単語の集合 から集合 への遷移を仮定して単語 に対応する状態で機能することを除いて、単一単語オートマトンの構築に似ています。[24] [25]
この考え方は、が明示的に与えられず、代わりに頂点を持つプレフィックスツリーによって与えられる場合にさらに一般化される。Mohriらは、そのようなオートマトンが最大でを持ち、そのサイズから線形時間で構築できることを示した。同時に、そのようなオートマトン内の遷移の数は に達する可能性があり、たとえば、アルファベット上の単語の集合の場合、単語の合計長は に等しく、対応するサフィックストライの頂点の数は に等しく、対応するサフィックスオートマトンが状態と遷移から形成される。Mohriによって提案されたアルゴリズムは、主に複数の文字列のオートマトンを構築するための一般的なアルゴリズムを繰り返しますが、単語を1つずつ増やす代わりに、幅優先探索順序でトライをトラバースし、トラバース中に新しい文字に遭遇すると追加します。これにより、償却線形計算量が保証されます。[26]
引き戸
LZ77やRLEなどの一部の圧縮アルゴリズムでは、文字列全体ではなく、文字列が更新されている間、最後の文字だけサフィックスオートマトンまたは同様の構造を格納することでメリットが得られる場合があります。これは、圧縮されたデータは通常表現的に大きく、メモリの使用は望ましくないためです。1985年に、ジャネット・ブルーマーは、文字が独立して均一に分布していると仮定して、最悪の場合と平均でサイズ のスライディングウィンドウにサフィックスオートマトンを維持するアルゴリズムを考案しました。彼女はまた、複雑性は改善できないことも示しました。 が複数の単語の連結として解釈される単語を考えると、 の場合、サイズ のウィンドウの状態数は の順序のジャンプで頻繁に変化し、通常のサフィックスオートマトンに対する の理論的改善さえ不可能になります。[27]
同じことはサフィックスツリーにも当てはまるはずです。なぜなら、サフィックスツリーの頂点は反転した文字列のサフィックスオートマトンの状態に対応しているからです。しかし、この問題は、文字列全体のサフィックスに対応するすべての頂点を明示的に保存せず、少なくとも2つの出力エッジを持つ頂点のみを保存することで解決できます。このタスクに対する McCreight のサフィックスツリー構築アルゴリズムのバリエーションは、1989 年に Edward Fiala と Daniel Greene によって提案されました。[28]数年後、 Jesper Larsson によるUkkonen のアルゴリズムのバリエーションで同様の結果が得られました。 [29] [30]サフィックスツリーとサフィックスオートマトンの両方の特性を吸収する圧縮サフィックスオートマトン用のこのようなアルゴリズムの存在は、長い間未解決の問題でしたが、2008 年に Martin Senft と Tomasz Dvorak によって、アルファベットのサイズが少なくとも 2 の場合は不可能であることが発見されました。[31]
この障害を克服する一つの方法は、ウィンドウ幅を のままで少し変化させることである。これは、2004年に稲永らが提案した近似アルゴリズムによって達成できるかもしれない。このアルゴリズムでサフィックスオートマトンが構築されるウィンドウは、長さが であることは保証されないが、アルゴリズムの全体的な複雑さを線形にしながら、少なくとも かつ であることが保証される。 [32]
アプリケーション
文字列の接尾辞オートマトンは以下の問題を解くために使われる: [33] [34]
- オンラインでの異なる部分文字列の数を数えると、
- で少なくとも2回出現する最長の部分文字列を見つける。
- と の最長共通部分文字列を見つけると、
- 内の出現回数を数えると、
- 内ののすべての出現を検索します。 は出現回数です。
ここでは、の接尾辞オートマトンが構築された後に入力に与えられると仮定する。[33]
サフィックスオートマトンはまた、データ圧縮[35] 、音楽検索[36] [37] 、ゲノム配列のマッチングにも使用されます。[38]
参考文献
- ^ ab Crochemore & Vérin (1997)、p. 192
- ^ ab ワイナー (1973)
- ^ プラット(1973)
- ^ スリセンコ(1983)
- ^ ブルーマー他 (1984)、109ページ
- ^ チェン&セイフェラス(1985)、97ページ
- ^ ab ブルーマー他 (1987)、p.578
- ^ ab 稲永ら。 (2001)、p. 1
- ^ Crochemore & Hancart (1997)、3~6ページ
- ^ ab セレブリャコフら。 (2006)、50–54 ページ
- ^ Рубцов (2019)、89–94 ページ
- ^ ホップクロフト&ウルマン(1979)、65-68頁
- ^ ab ブルーマー他 (1984)、pp. 111–114
- ^ abcdefgh クロシュモア&ハンカート(1997)、pp.27–31
- ^ abcdefg 稲永ら。 (2005)、159–162 ページ
- ^ Rubinchik & Shur (2018)、1–2 ページ
- ^ 稲永ら。 (2005)、156–158 ページ
- ^ abc 藤重ほか(2016)、1–3 ページ
- ^ abcdefg Crochemore & Hancart (1997)、31–36 ページ
- ^ Паращенко (2007)、19–22 ページ
- ^ ブルーマー(1987)、451ページ
- ^ 稲永(2003)、p.1
- ^ ab ブルーマー他 (1987)、pp. 585–588
- ^ ブルーマー他 (1987)、588-589頁
- ^ ブルーマー他 (1987)、593ページ
- ^ 毛利、モレノ、ワインスタイン (2009)、pp. 3558–3560
- ^ ブルーマー(1987)、461-465頁
- ^ フィアラとグリーン (1989)、p. 490
- ^ ラーソン(1996)
- ^ Brodnik & Jekovec (2018)、p. 1
- ^ ゼンフト & ドヴォルザーク (2008)、p. 109
- ^ 稲永ら (2004)
- ^ クロシュモア&ハンカート(1997年)、36~39ページ
- ^ クロシュモア&ハンカート(1997)、39-41頁
- ^ 山本ら。 (2014)、p. 675
- ^ Crochemoreら。 (2003)、p. 211
- ^ 毛利、モレノ、ワインスタイン (2009)、p. 3553
- ^ ファロ(2016)、145ページ
文献
- Blumer, A.; Blumer, J.; Ehrenfeucht, A.; Haussler, D.; McConnell, R. (1984)。「単語のすべてのサブワードの集合に対する最小 DFA をオンラインで線形時間で構築する」。オートマトン、言語、プログラミング。コンピュータ サイエンスの講義ノート。第 172 巻。pp. 109–118。doi : 10.1007 /3-540-13345-3_9。ISBN 978-3-540-13345-2。
- Blumer, A.; Blumer, J.; Haussler, D.; McConnell, R.; Ehrenfeucht, A. (1987). 「効率的なテキスト検索と分析のための完全な反転ファイル」Journal of the ACM . 34 (3): 578–595. doi :10.1145/28869.28873. Zbl 1433.68118.
- ブルーマー、ジャネット A. ( 1987 )。「ウィンドウ内の DAWG はいくらですか? 有向非巡回ワード グラフの移動ウィンドウ アルゴリズム」。アルゴリズム ジャーナル。8 (4): 451–469。doi : 10.1016 /0196-6774(87)90045-9。Zbl 0636.68109 。
- アンドレイ・ブロドニク。イェコヴェツ、マテヴシュ (2018)。 「スライディングサフィックスツリー」。アルゴリズム。11 (8): 118.土井: 10.3390/A11080118。Zbl 1458.68043。
- Chen, MT; Seiferas, Joel (1985)。「効率的でエレガントなサブワードツリーの構築」。単語の組み合わせアルゴリズム。pp . 97–107。doi : 10.1007 /978-3-642-82456-2_7。ISBN 978-3-642-82458-6。
- Crochemore, Maxime; Hancart, Christophe (1997). 「パターンマッチングのためのオートマトン」形式言語ハンドブックpp. 399–462. doi :10.1007/978-3-662-07675-0_9. ISBN 978-3-642-08230-6。
- Crochemore, Maxime; Vérin, Renaud (1997)。「コンパクトな有向非巡回ワードグラフについて」。論理とコンピュータサイエンスの構造。コンピュータサイエンスの講義ノート。第 1261 巻。pp. 192–211。doi : 10.1007/3-540-63246-8_12。ISBN 978-3-540-63246-7。
- クロシュモア、マキシム。イリオプロス、コスタス S.ナバロ、ゴンサロ。ピンゾン、ヨアン J. (2003)。 「音楽検索における (δ,γ) マッチングのためのビット並列サフィックス オートマトン アプローチ」。文字列の処理と情報の取得。コンピューターサイエンスの講義ノート。 Vol. 2857。211–223 ページ。土井:10.1007/978-3-540-39984-1_16。ISBN 978-3-540-20177-9。
- セレブリャコフ、ウラジミール。ガロチキン、マクシム・パブロヴィッチ。フルジアン、メラン・ガビブラエヴィッチ。ゴンチャール、ドミトリー・ルスラノヴィッチ(2006)。 Теория и реализация языков программирования: Учебное пособие (PDF) (ロシア語)。モスクワ:MZプレス。ISBN 5-94073-094-9。
- ファロ、シモーネ (2016)。「ゲノム配列の完全一致のための高速アルゴリズムの評価と改善」。計算生物学のためのアルゴリズム。コンピュータサイエンスの講義ノート。第 9702 巻。pp . 145–157。doi :10.1007/978-3-319-38827-4_12。ISBN 978-3-319-38826-7。
- Fiala, ER; Greene, DH (1989). 「有限ウィンドウによるデータ圧縮」Communications of the ACM . 32 (4): 490–505. doi :10.1145/63334.63341.
- 藤重 雄太; 辻丸 由紀; 稲永 俊介; 坂内 秀夫; 武田 正之 (2016). 「整数アルファベットの DAWG と極小欠落語の線形時間計算」.第 41 回国際コンピュータサイエンス数学基礎シンポジウム (MFCS 2016) . ライプニッツ国際情報学会議論文集. ダグストゥール城 – ライプニッツ情報学センター. pp. 38:1–38:14. doi : 10.4230/LIPICS.MFCS.2016.38 . Zbl 1398.68703.
- ホップクロフト、ジョン・エドワード、ウルマン、ジェフリー・デイビッド(1979年)。オートマトン理論、言語、計算入門(第1版)。マサチューセッツ州:アディソン・ウェスレー。ISBN 978-81-7808-347-6. OL 9082218M.
- 稲永俊介 (2003). 「サフィックスツリーの双方向構築」(PDF) . Nordic Journal of Computing . 10 (1): 52–67. CiteSeerX 10.1.1.100.8726 .
- 稲永俊介;星野宏正;篠原あゆみ;武田 正幸;有川節夫;マウリ、ジャンカルロ。パヴェシ、ジュリオ (2005)。 「コンパクトな有向非巡回ワードグラフのオンライン構築」。離散応用数学。146 (2): 156–179。土井:10.1016/J.DAM.2004.04.012。ズブル 1084.68137。
- 稲永俊介;星野宏正;篠原あゆみ;武田 正幸;有川節夫(2001)。 「トライのためのCDAWGの構築」(PDF)。プラハ弦学カンファレンス。議事録。 37~48ページ。CiteSeerX 10.1.1.24.2637。
- 稲永俊介;篠原あゆみ;武田 正幸;有川節夫(2004)。 「スライディング ウィンドウ用のコンパクトな有向非巡回ワード グラフ」。離散アルゴリズムのジャーナル。2:33~51。土居:10.1016/S1570-8667(03)00064-9。Zbl 1118.68755。
- Larsson, NJ (1996)。「サフィックス ツリーのデータ圧縮への拡張アプリケーション」。データ圧縮会議 - DCC '96 の議事録。pp. 190–199。doi :10.1109/DCC.1996.488324。ISBN 0-8186-7358-3。
- Mohri, Mehryar; Moreno, Pedro; Weinstein, Eugene (2009). 「一般的なサフィックスオートマトン構築アルゴリズムと空間境界」.理論計算機科学. 410 (37): 3553–3562. doi :10.1016/J.TCS.2009.03.034. Zbl 1194.68143.
- Паращенко、Дмитрий А。 (2007)。 Обработка строк на основе суффиксных автоматов (PDF) (ロシア語)。サンクトペテルブルク: ITMO 大学。
- Pratt, Vaughan Ronald (1973)。Weiner繰り返し検索器の改良と応用。OCLC 726598262。
- Рубцов、Александр Александрович(2019)。 Заметки и задачи о регулярных языках и конечных автоматах (PDF) (ロシア語)。モスクワ: モスクワ物理工科大学。ISBN 978-5-7417-0702-9。
- ルビンチク、ミハイル。シュール、アーセニー M. (2018)。 「EERTRE: 文字列内の回文を処理するための効率的なデータ構造」。欧州組合せ論ジャーナル。68 : 249–265。arXiv : 1506.04862。土井:10.1016/J.EJC.2017.07.021。Zbl 1374.68131。
- Senft, Martin; Dvořák, Tomáš (2008)。「Sliding CDAWG Perfection」。文字列処理と情報検索。コンピュータサイエンスの講義ノート。第 5280 巻。pp. 109–120。doi : 10.1007 / 978-3-540-89097-3_12。ISBN 978-3-540-89096-6。
- Slisenko, AO (1983). 「周期性の検出とリアルタイムの文字列マッチング」。ソビエト数学ジャーナル。22 (3): 1316–1387。doi : 10.1007 /BF01084395。Zbl 0509.68043 。
- Weiner, Peter (1973)。 「線形パターン マッチング アルゴリズム」。第 14 回スイッチングおよびオートマトン理論シンポジウム (Swat 1973)。pp. 1–11。doi :10.1109/SWAT.1973.13。
- 山本 純一; 井 智弘; 坂内 秀夫; 稲永 俊介; 武田 正之 (2014). 「より高速でコンパクトなオンライン Lempel-Ziv 因数分解」. 31st International Symposium on Theoretical Aspects of Computer Science (STACS 2014) . Leibniz International Proceedings in Informatics. Schloss Dagstuhl – Leibniz-Zentrum für Informatik. pp. 675–686. doi : 10.4230/LIPICS.STACS.2014.675 . Zbl 1359.68341.
