SAM 字尾自動機

2022-06-20 07:06:08 字數 572 閱讀 5769

這玩意還真的好玄學,看了半天,也就看了個大概吧

確實很妙

總算理解了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後除了主鏈,即代表原串的鏈,其他的邊要麼就是構成了乙個新的字尾,要麼就是連線若干條構成了乙個新的字尾的邊,形成乙個類似樹的結構,所以邊也是線性的。很多性質...