我天真地想象到,我可以建立一個後綴trie,我爲每個節點保留一個訪問計數,然後計數大於1的最深節點是我正在查找的結果集對於。在一個巨大的字符串中發現長重複的子字符串
我有一個非常長的字符串(數百兆字節)。我有大約1 GB的RAM。
這就是爲什麼使用計數數據構建後綴特里結構對於我而言效率太低的太空效率。引用Wikipedia's Suffix tree:
存儲字符串的後綴樹通常需要比存儲字符串本身更多的空間。
每個邊緣和節點中的大量信息使得後綴樹非常昂貴,在良好的實現中消耗大約十到二十倍的源文本的內存大小。後綴數組將這一要求降低到四分之一,研究人員繼續尋找較小的索引結構。
這就是維基百科對樹的評論,而不是trie。
如何在如此大量的數據中以及在合理的時間內(例如,在現代臺式機上少於一個小時)找到長的重複序列?
(有些維基百科的鏈接,以避免人張貼的「答案」:Algorithms on strings,尤其是Longest repeated substring problem ;-))
FWIW,這裏有一個相關的問題,我寫了SpamAssassin的的實現,可能是有用的:http://taint.org/2007/03/05/ 134447a.html – 2010-05-07 11:43:46