字尾陣列與字尾自動機學習筆記

2022-07-13 20:27:11 字數 459 閱讀 8190

這只是個人小結,沒啥大意義。

字尾陣列

其實就是通過把字串的所有字尾排序來實現一些東西。

字尾排序可以用倍增+雙關鍵字來實現。

然後排完之後可以求出height陣列,然後就可以用rmq求lca了。

字尾自動機

各種複雜度都是線性的,非常優秀。

原理:把具有相同right集合的狀態縮成乙個點,這個點內的所有狀態互為字尾。

每個狀態有乙個minlen和maxlen,表示這個狀態內的最長子串和最短子串。

構造方法:增量構造法,考慮這個字元的加入會使之前的所有字尾增加乙個字元,所以可以通過調fail樹來構造。

然後就是father的問題,如果l[p]+1=l[q]那麼可以直接連father,否則直接連狀態會出現問題,那麼我們就新建立乙個節點。

應用:1、求某個子串在原串中的出現次數,在字尾節點上大標記,該子串代表的節點子樹的size就是出現次數。

模板 字尾陣列 字尾自動機

關於字尾自動機sam,貼乙個非常好的講解 字尾自動機學習小記 交洛谷模板可a 傳送門 洛谷 模板 字尾排序 include using namespace std const int n 1e6 5 char s n int sa n t1 n t2 n c n int n,m 555 void s...

學習筆記 字尾自動機

其實我字尾自動機在 2020 2 的時候就會了,刷了很多題,但是一直沒有搞懂原理,現在補一發關於字尾自動機原理的部落格。我盡量節約時間,把最重要的東西寫的盡量好理解。我是看這位巨佬的部落格學的,所以會有一些重合的地方,但是我會按照我自己的理解寫 仔細看你會發現我們的表述相差很大 爭取達到乙個優化的效...

字尾自動機 筆記

參考了hihocoder和clj的課件,看了看hzwer的 懂了些東西,記一下。字尾自動機是一棵trie樹。給出乙個字串s,對於s的乙個子串s,right s 代表乙個集合,為s在s中所有出現的結束位置集合。以s aabbabd 為例,right ab 因為 ab 一共出現了2次,結束位置分別是3和...