字尾陣列學習

2021-07-11 14:03:21 字數 538 閱讀 7241

參考《演算法入門經典》

和rank: 名次陣列(字尾i在所有字尾中從小到大排列的名次),(以第k個字元開始的字尾稱為字尾k)rank[0…n-1]有效

height: height[i] = suffix(sa[i - 1])和suffix(sa[i])的最長公共字首,也就是排名相鄰的兩個字尾的最長公共字首。height[2…n]有效

const

int maxn = 10010;

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

int cmp(int *r, int a, int b, int l)

void da(int *r,int *sa,int n,int m)

return;

}int rank[maxn],height[maxn];

void calheight(int *r,int *sa,int n) // 這裡的n是原串的本來長度,即不包括新增的0

int main()

字尾陣列學習

字尾陣列sa是乙個一維陣列,它是將 s 的 n 個字尾從小到大進行排序之後把排好序的字尾的開頭位置順次放入 sa 中。比如 banana的所有字尾是banana,anana,nana,ana,na,a,按照字典序排列就是a,ana,anana,banana,na,nana,那麼字尾陣列就是。首先將單...

字尾陣列學習小結

這兩天學習了字尾陣列,感想是,果然字尾陣列比網路流可愛的多,就像字串比圖論可愛的多。有模板真好qvq。總結了一下字尾陣列的幾個要點 一.理解rank sa height三個陣列。分別代表所構成的字尾陣列str i 在程式裡並不表現出來 排名後的名次 排名後第i位是str中的哪乙個 str sa i ...

字尾陣列學習 模板

字尾陣列學習 模板 裡面說的很清楚,各個變數的解釋還蠻清晰 該鏈結裡面有很多文章,這篇有圖形解釋,容易理解 不過有書看也更好 字尾陣列的思想 先比較所有字尾的 前2 0次方個字元,然後比較 前2 1次方個字元,然後 2 2,2 3,直到所有字尾的 前2 i 個字元比較不存在完全相同的情況,就停止。1...