資料結構 倍增演算法 字尾陣列

2022-05-22 17:45:12 字數 671 閱讀 5944

字尾陣列

先根據字串中字元的出現情況,給每一種字元乙個對應的排名(從1開始),作為第一次排序的結果

如此迴圈,直到第乙個位置加上倍增步數後超出字串長度為止,算作演算法結束,此時得到的排序結果即為sa陣列

總共排序次數為 logn

若排序使用快排o(nlogn),則總時間複雜度為o(nlog2n)

若使用基數排序,則可將排序複雜度降至o(n),總複雜度降為o(nlogn)

經典基數排序圖示:

完全看懂太難了,學會用法後複製貼上吧

const int n=100050;

int xx[n],yy[n],cnt[n]; //快取陣列

int sa[n],rk[n],height[n]; //結果

char str[n]; //字串

void getsa_da(int n,int m) //n=length+1,m表示待處理字串最大可能擁有的字元種類

}void getheight(int n)

int main()

字尾陣列 倍增演算法模板

關於字尾陣列的資料,可以看noi2009國家集訓隊 羅穗騫 的 字尾陣列 處理字串的有力工具 suffix array 倍增演算法 o n lgn build sa n 1,注意n 1 getheight n n 8 num 注意num陣列最後一位值為0,其它位須大於0 rank rank 0 n ...

資料結構 字尾陣列

學習了一下字尾陣列。這個題目是字尾陣列裡面比較經典的一種。字尾陣列有幾個比較經典的應用 字尾陣列主要是用於把乙個字串的字尾排序。先說幾個常用的陣列 sa陣列 sa i 表示排名為i的字尾在原串中的起始位置是多少 rank陣列 rank i 表示起始位置為i的字尾排名第幾 h陣列 h i 表示排名第i...

利用倍增演算法的字尾陣列

仍然不是很懂,貼篇文章放在這兒希望有朝一日能頓悟吧。老天,乙個字尾陣列不知道看了多少天,最後終於還是看懂了啊!最關鍵的就是一會兒下標表示排名,一會用數值表示排名繞死人了。我不知道手跑了多少次才明白過來。其實我也建議初學者手跑幾遍,但是一定要注意陣列的意義,否則就是無用功。s 輸入的字串,預處理的時候...