學習筆記 字尾陣列

2022-04-30 11:03:07 字數 839 閱讀 9457

字尾陣列是指對於字尾排序後,每個字尾的位置:sa[rank]=pos:排名為rank的字尾是pos->len這個字尾

note:rank[pos]=rank:位置為pos的串排名為rank

白書上的**簡潔明瞭,很容易理解。

核心思想:我們對於每個位置開始的字尾,不直接計算,先計算從這個位置開始,向後1位是第幾小,然後向後2位,向後4位,一直到*2>n,這時就算好了字尾陣列

複雜度:o(n*log(n)^2) :倍增log(n),快排log(n)

2017/1/8 lcp中相鄰的兩個字串是這兩個字串的最大lcp,和左和右誰大不確定(好像聽不懂)

似乎聽了課之後又有了些感悟:為什麼pos+1的lcp至少是pos的lcp-1,因為pos+1位置前面至少會有pos前乙個字尾截掉第乙個字元,肯定比pos+1小,並且兩個東西lcp為pos的lcp-1

**:

bool cp(int x,int y)

void

sa()

radix(b, sa, rank, n, n + 1

); radix(a, rank, sa, n, n + 1

); rank[sa[

1]] = 1

;

for(int i = 2; i <= n; ++i) rank[sa[i]] = rank[sa[i - 1]] + (a[sa[i]] != a[sa[i - 1]] || b[sa[i]] != b[sa[i - 1

]]);

}}void

lcp()

}int

main()

view code

字尾陣列學習筆記

要用好字尾陣列要先理解裡面幾個陣列的概念 sa i 表示字典序第i大的字尾下標 字典序排名依次是1 len stri ng ra nk i 表示下標為i的字尾字典序排名 he ight i 表示sa i 和sa i 1 最長公共字首的長度.乙個性質 lc p su ffix i suff ix j ...

字尾陣列 學習筆記

字尾陣列是處理字串的強有力的工具 在字串處理當中,字尾樹和字尾陣列都是非常有力的工具。其實字尾陣列是字尾樹的乙個非常精巧的替代品,它比字尾樹容易程式設計實現,能夠實現字尾樹的很多功能而時間複雜度也不太遜色,並且,它比字尾樹所占用的空間小很多。可以說,在資訊學競賽中字尾陣列比字尾樹要更為實用。我們定義...

字尾陣列 學習筆記

剛剛學完回文自動機 來學字尾陣列 一開始思路看得懂 但是 看不懂呀 一堆神仙 洛谷p3809 勿謂我,何強過者,炸哉!我們需要一種新的演算法 字尾陣列 首先,輸入字串 scanf s ch 1 n strlen ch 1 然後,按照題意 suffix sort ch for int i 1 i n ...