1. 程式人生 > 其它 >字尾陣列 SA

字尾陣列 SA

字尾陣列 SA

字尾樹組(SA,suffix array),用於???

含義與實現

字尾

我們定義長度為 \(n\) 的字串 \(s\) 編號為 \(l\) 的字尾為 \(s\)\([l,s]\) 上的字串,記 \(l\)(即起始位置)為該字尾的編號

字尾樹組

如果將 \(s\) 所有 \(n\) 個字尾提取出來,按照字典序升序排序,字尾陣列 \(\text{SA}_i\) 定義為排名為 \(i\) 的字尾的編號

那麼怎麼求出一個字串的字尾陣列呢?

求解

顯然暴力找出 \(n\) 個字尾再快速排序的 \(\mathcal{O(n^2\log n)}\) 的(加上比較的複雜度),不夠優美。

一般採用 Manber 和 Myers 發明的類似於倍增的方法求解。

(下面圖片來自jinkun113 - 字尾陣列,如有侵權請告知刪除)

咕咕咕

字尾陣列:排名 \(\rightarrow\) 編號,存的是編號

記錄第一第二關鍵字的 \(x_i,y_i\):編號 \(\rightarrow\) 排名,存的是排名

他們互為補充,相輔相成,相得益彰