Suffix automaton
Deterministic acyclic finite state automaton,也叫directed acyclic word graph(DAWG),是一個識別若幹字串的無環DFA。識別若干字串的所有DAWG中,存在唯一一個狀態數最少的DAWG,稱作minimal DAWG,即識別這個字串集的DFA。
DAWG在有些文獻中也指識別一個字串的所有後綴的自動機,這種用法有個更常見的名稱:suffix automaton,此時該自動機可以看做是字串所有後綴的DAWG。
定義
Factor,即子串。
, 的所有子串。比如 。 表示 的所有後綴的集合。比如 。 表示 中 所有出現位置右邊的串的集合。比如對於 ,其 。 表示 中 和 的出現位置集合相同,即 。 爲串 中子串 的suffix function: 的最長後綴 ,滿足 。 無定義。當 定義在 的所有後綴上時就得到了suffix link,因此suffix function是suffix link的推廣,用於處理factor的集合。 用上標表示函數應用的次數,即
, , ……
一些引理
在考慮
引理1
給
對於
引理2
令
證明:
- 若
,則 是 中出現過的 的一個後綴,由 定義知 。 - 存在最大的非負整數
使得 , 由 性質有 , 又 ,故 。 因此 即 。 - 因此
。對稱地, 。 所以 和 同時在 中或同時不在。 - 根據引理1,即
與 的關係知 。
這條引理說明,對於
引理3
依舊令
下面的引理則說明,
。 - 由引理1和
知 - 由
知 ,故 。因此 - 前兩式得
- 由引理1和
,其中 為滿足 的 中最長子串,且不是 的後綴。 和 都不是 的後綴
如果第二個分類不爲空,則
性質
長度a時即可取到下界。
另外對於
記
構建
採用一個在線算法構建字串
添加字符
未在 中出現 只多了一個狀態 ,該狀態的suffix function爲起始狀態。 所有後綴的狀態都應添加在字符 上的轉移,指向新狀態。方法是從 出發,追溯 得到的所有狀態都添加指向新狀態的邊。 在 中出現 從 出發,追溯 ,直到遇到第一個頂點 存在字符 上的轉移,設轉移到 。 表示的最長串(長度爲 )後添加 就是 (長度爲 )。 的等價類則表示 中與 等價的所有 。 然後再分兩種情況: - 若
,則 的長度大於等於 中與 等價的任一 。 的等價類(表示爲狀態 )不會分裂。Suffix automaton只多了一個表示 等價類的狀態 , ,其 ,包含與 ,因此設置 。 - 若
,則存在 , 需要拆分爲兩個狀態,分別表示 (狀態 )和 (新狀態 ), 繼承 的所有邊, , 需要修改爲 。另外還要沿着 ,把沿路狀態在 上的轉移改爲 。
- 若
稍作修改該算法即可用於多串suffix
automaton的構建。處理新字串時,把
1 | struct Node |
性質
另
表示從 開始,沿著 函數回溯得到的所有狀態,accepting states是 。 Suffix automaton中所有邊
形成一棵spanning tree。 ,所以對於suffix automaton中任意頂點 , 對於邊
, ,所以可以對所有頂點的 值做計數排序,達到拓撲排序的效果。
輔助數據結構
設
對所有狀態拓撲排序後,根據其逆序計算即可求出各個狀態的
應用
- 列出模式串在文本串中所有匹配位置(all occurrences)。
- 求出最長的出現至少
次的子串。尋找最深的節點 滿足 ,其深度即爲答案。 - Ending factors。給定兩個串
和 ,對於 的所有前綴 ,求出 的最長後綴爲 的子串。可用於計算兩串的最長公共子串。 - Searching for rotations。給定兩個串
和 , 的任意rotation(或稱爲conjugate)在 中出現的位置。技巧是把 和自身拼接,得到 ,它包含 的 個rotation,轉化爲 和 的ending factors問題。 個串的最長公共子串。求 次ending factors。
相關數據結構
Factor automaton
Suffix automaton有個類似的數據結構,稱作factor automaton,它識別一個字串的所有子串,可以看作識別所有子串的minimal DAWG。
求出
反過來,可以通過factor automaton獲得suffix automaton。參見Maxime Crochemore、Christophe Hancart的《Automata for Matching Patterns》中的FA-to-SA。
Suffix oracle和factor oracle
Suffix oracle是一種簡化的suffix automaton。
某次添加字符
Suffix oracle可以看作是suffix automaton合併了一些狀態後得到的自動機。其接受的串的集合是suffix automaton接受的串的集合的超集,也就是說它不會遺漏suffix automaton接受的串,但可能會有誤判。
Suffox oracle的優點是節點數為
把suffix oracle的所有狀態標記爲可接受即得到factor oracle,且已是最簡形態,無法minimize。
其他類似數據結構
Position heap
比suffix tree簡單,存在一個
參考文獻
Allauzen C., Crochemore M., Raffinot M., Factor oracle: a new structure for pattern matching; Proceedings of SOFSEM’99; Theory and Practice of Informatics.
@article{Revuz:1992:MAD:135853.135907, author = {Revuz, Dominique}, title = {Minimisation of Acyclic Deterministic Automata in Linear Time}, journal = {Theor. Comput. Sci.}, issue_date = {Jan. 6, 1992}, volume = {92}, number = {1}, month = jan, year = {1992}, issn = {0304-3975}, pages = {181--189}, numpages = {9}, url = {http://dx.doi.org/10.1016/0304-3975(92)90142-3}, doi = {10.1016/0304-3975(92)90142-3}, acmid = {135907}, publisher = {Elsevier Science Publishers Ltd.}, address = {Essex, UK}, }