這玩意還真的好玄學,看了半天,也就看了個大概吧
確實很妙
總算理解了parent樹,但是關於sam的dag的性質的證明並沒有看太懂,也沒有特別明白。。。
update:又看了一會,原來是自己把定義搞錯了,字尾自動機其實是在滿足以下條件的最簡狀態,主要是難構造,掌握構造**就好了,證明就不管了c。
條件如下:(摘自kesdiaelken的blog《史上最通俗的字尾自動機詳解》)
1.有乙個源點,若干個終止點。邊代表在目前的字串後加上的字母。從源點到任意乙個節點的任意路徑可以形成乙個字串。
2.從源點到任意節點的任意路徑形成的字串均為原串子串。從源點到任意節點的任意路徑不能形成的字串均不為原串子串。(簡單來說,這個圖可以表示,且僅可以表示出原串的所有子串)
3.從源點到任意終止節點的任意路徑形成的字串均為原串字尾。
4.從源點出發的任意兩條不同路徑形成的字串不相同。
不過主要就是記一下結論吧
在sam上,從源點跑到任意乙個點的一條路徑都是乙個子串,不重,且所有路徑形成子串的並集就是原串子串集。
也一定要理解parent 樹
字尾自動機SAM
原理詳細的可以看史上最通俗的字尾自動機詳解 想看懂還是要花很久。實現 include include using namespace std const int maxn 2000010 struct node nodes maxn int las 1 tot 1 char st maxn void...
SAM 字尾自動機
好文 luogup3804 定義.對給定字串s的字尾自動機是乙個最小化確定有限狀態自動機,它能夠接收字串s的所有字尾。對給定字串s的字尾自動機是乙個最小化確定有限狀態自動機,它能夠接收字串s的所有字尾。某一狀態t 0被稱作初始狀態,由它能夠到達其餘所有狀態。自動機中的所有轉移 即有向邊 都被某種符號...
字尾自動機sam學習小記
顧名思義,字尾自動機就是可以識別原串所有字尾的自動機,最後回到達葉子狀態,同時也可以識別所有連續子串。線性。由構造方法可知點數是線性的。構出sam後除了主鏈,即代表原串的鏈,其他的邊要麼就是構成了乙個新的字尾,要麼就是連線若干條構成了乙個新的字尾的邊,形成乙個類似樹的結構,所以邊也是線性的。很多性質...