后缀树和后缀数组的一些资料收集
后綴樹(Suffix tree)是一種數據結構,能快速解決很多關于字符串的問題。后綴樹的概念最早由Weiner 于1973年提出,既而由McCreight 在1976年和Ukkonen在1992年和1995年加以改進完善。
后綴樹提出的目的是用來支持有效的字符串匹配和查詢。
一個具有m個詞的字符串S的后綴樹T,就是一個包含一個根節點的有向樹,該樹恰好帶有m個葉子,這些葉子被賦予從1到m的標號。 每一個內部節點,除了根節點以外,都至少有兩個子節點,而且每條邊都用S的一個非空子串來標識。出自同一節點的任意兩條邊的標識不會以相同的詞開始。后綴樹的關鍵特征是:對于任何葉子i,從根節點到該葉子所經歷的邊的所有標識串聯起來后恰好拼出S的從i位置開始的后綴,即S[i,…,m]。樹中節點的標識被定義為從根到該節點的所有邊的標識的串聯。
圖中示意了字符串 "I know you know I know "的后綴樹。內部節點用圓來表示,葉子用矩形來表示,該例子中有六個葉子,被標號為1到6。 終止字符在圖中被省略掉了。
同理, 若干字符串組成的后綴樹, 稱為一個擴展的后綴樹:n個字符串Sn,其中字符串的長度為mn, 由這些字符串組成一個擴展的后綴樹 T ,它是一個包含一個根節點的有向樹,該樹有?mn個葉子,每個葉子都用一個兩數字的坐標tuple(k,l)來標識,其中k的范圍是從1到n,而l的范圍是從1到mk ,每一個內部節點,除了根節點外,都有兩個子節點并且每條邊都用一個非空的S中若干單詞構成的一個子串來標識。并且出自同一節點的任意兩條邊的標識的第一個單詞不能相同。對于任意的葉子(i,j),從根節點到該葉子所經歷的所有邊的標識的串聯恰好拼出后綴Si,該后綴從位置j開始,就是說它們拼出了Si[j..mi]。
用 Ukkonen 算法構造后綴樹/后綴數組,O(n),用鏈表存放子節點(代碼)
用倍增算法構造后綴數組,O(n log n)
后綴樹與后綴數組
后綴數組(IOI國家集訓隊論文)
轉載于:https://www.cnblogs.com/webtrados/archive/2010/06/06/1752833.html
總結
以上是生活随笔為你收集整理的后缀树和后缀数组的一些资料收集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server FOR XML P
- 下一篇: UI设计入门书籍(未整理)