我天真地想象到,我可以建立一个后缀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