字尾陣列 SA
阿新 • • 發佈:2022-03-25
字尾陣列 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\) 排名,存的是排名。
他們互為補充,相輔相成,相得益彰