字尾陣列自學

2021-07-28 03:55:38 字數 791 閱讀 3555

sa[i],表示在所有字尾中,排在第i位的字尾是哪個字尾。

rank[i],表示以第i個字母為結尾的字尾在所有字尾中排第rank[i]個。

height 陣列,表示height[i]=(suffix(sa[i-1])和suffix(sa[i])的最長公共字首),也就是排名相鄰的兩個字尾的最長公共字首的長度 。

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=200010;

int wa[maxn],wb[maxn],wsf[maxn],wv[maxn];

int rank[maxn],height[maxn],s[maxn],sa[maxn];

void make_sa(int n,int m)

for(i=0;ifor(i=0;i0;

for(i=0;ifor(i=1;i1];

for(i=n-1;i>=0;i--) sa[--wsf[wv[i]]]=y[i];

swap (x,y);

x[sa[0]]=0;

for(p=1,i=1;i1]]==y[sa[i]]&&y[sa[i-1]+j]==y[sa[i]+j]) ? p-1 : p++;}}

}void make_height(int n)

}int main ()

字尾樹 字尾陣列

在字串處理當中,字尾樹和字尾陣列都是非常有力的工具,其中字尾樹大家了解得比較多,關於字尾陣列則很少見於國內的資料。其實字尾陣列是字尾樹的乙個非 常精巧的替代品,它比字尾樹容易程式設計實現,能夠實現字尾樹的很多功能而時間複雜度也不太遜色,並且,它比字尾樹所占用的空間小很多。可以說,在資訊學競賽 中字尾...

字尾樹 字尾陣列

我們考慮將乙個串的所有字尾插入乙個trie中,得到的trie就是字尾trie。我們可以發現,樹上有分叉或者是字尾節點的點的個數是o l en o len o len 個,這個後面解釋,於是把沒有分支並且不是字尾節點的點壓縮到一起,就變成了字尾樹。不難發現,字尾樹可以表示該字串的所有子串。下面分析一下...

字尾陣列入門,字尾陣列模板整理

我自己懶得寫,就是想寫個部落格儲存下大佬的部落格位址 點這模板題 大佬的模板 include include include include include include include include include include include define inf 0x3f3f3f3f d...