字串 最小字尾自動機與有限狀態自動機

2021-06-16 03:42:04 字數 833 閱讀 5820

1、 最小字尾自動機

乙個串x的最小字尾自動機sa(suffixautomaton),記為sa(x),即識別串x的所有字尾的最小確定自動機.

如圖1所示,該自動機可以接受串baabbaa的以下所有字尾:

ε,a,aa,baa,bbaa,abbaa,aabbaa,baabbaa.

已經存在以線性複雜度構造sa的演算法,對長度為m的串x,構造時間為o(m),且sa(x)的大小(包括節點數與邊數)為o(mσ).

從圖1中可以看出,該圖有多個起始狀態和多個終止狀態,不要被其表面的字尾2字引誘,只是說可以接受串的字尾,如果某個串能被這個自動機接受,那這個串必須得按從前向後的順序讀入,而不是從後向前的方式。

2、有限狀態自動機

本文所用到的正向有限狀態自動機ffa(forward finiteautomata)實際上就是正向識別模式的一般有限狀態自動機,只是在執行方式上有所不同.由於在反向字尾自動機執行結束時演算法已經匹配了模式的乙個(或多個)字首,所以正向有限狀態自動機執行時不是從傳統的開始狀態開始,而是從已匹配的最大字首所對應的狀態開始.開始狀態集合中不包含傳統的初始狀態,這是因為當前一階段識別的字首為ε時,不需要使用ffa進行掃瞄.在實現中,常常用已識別字首的長度來表示狀態.如圖2所示,該自動機使用不同的開始狀態1,2,3,4,5,6,7,分別可以接受串aabbaab的不同字尾:abbaab,bbaab,baab,aab,ab,b,ε.

ffa的構造也是乙個簡單的問題,使用與dfa匹配演算法[10]相同的構造演算法構造模式的ffa,其構造時間複雜度是o(m+σ),空間複雜度是o(mσ).

字串 字尾自動機

struct sam void extend int c if p 0 int q nxt p c if len p 1 len q int v siz mc nxt v nxt q len v len p 1 lnk v lnk q cnt v 0 while p 0 nxt p c q lnk ...

有限狀態自動機

有限自動機是更一般化的狀態轉化圖。分為確定有限自動機 dfa 和不確定有限自動機 nfa m s,f,so,z 其中 下圖為乙個確定的有限狀態自動機 m s,f,so,z 其中 下圖為乙個不確定的有限狀態自動機 說了半天其實它們的本質區別就在於s0,確定的有限狀態自動機的s0是唯一確定的。而不確定的...

有限狀態自動機

有限自動機是更一般化的狀態轉化圖。分為確定有限自動機 dfa 和不確定有限自動機 nfa m s,f,so,z 其中 下圖為乙個確定的有限狀態自動機 m s,f,so,z 其中 下圖為乙個不確定的有限狀態自動機 說了半天其實它們的本質區別就在於s0,確定的有限狀態自動機的s0是唯一確定的。而不確定的...