字尾陣列 字尾自動機學習筆記(待填坑)

2022-09-20 08:45:11 字數 923 閱讀 4153

我們約定字串 \(s\) 的字尾 \(i\) 指 \(s_\)。

字尾陣列(suffix array)主要是兩個陣列 \(sa\) 和 \(rk\),\(_i\) 表示字尾排序後第 \(i\) 小的字尾編號,\(_i\) 表示字尾 \(i\) 的排名。

顯然,\(__i}=__i}=i\)。

例如對字串 \(\textrm\) 的字尾排序如下:

\[\begin

rk & 4 & 6 & 8 & 1 & 2 & 3 & 5 & 7 \\

s & \textrm & \textrm & \textrm & \textrm & \textrm & \textrm & \textrm & \textrm \\ \hline

_1=4 & \textrm & \textrm & \textrm & \textrm & \textrm & & & \\

_2=5 & \textrm & \textrm & \textrm & \textrm & & & & \\

_3=6 & \textrm & \textrm & \textrm & & & & & \\

_4=1 & \textrm & \textrm & \textrm & \textrm & \textrm & \textrm & \textrm & \textrm \\

_5=7 & \textrm & \textrm & & & & & & \\

_6=2 & \textrm & \textrm & \textrm & \textrm & \textrm & \textrm & \textrm \\

_7=8 & \textrm & & & & & & & \\

_8=3 & \textrm & \textrm & \textrm & \textrm & \textrm & \textrm & & \\

\end

\]待填坑。

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

這只是個人小結,沒啥大意義。字尾陣列 其實就是通過把字串的所有字尾排序來實現一些東西。字尾排序可以用倍增 雙關鍵字來實現。然後排完之後可以求出height陣列,然後就可以用rmq求lca了。字尾自動機 各種複雜度都是線性的,非常優秀。原理 把具有相同right集合的狀態縮成乙個點,這個點內的所有狀態...

模板 字尾陣列 字尾自動機

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