简而言之,后缀树的Java实现和用法?

简而言之,后缀树的Java实现和用法?,java,algorithm,string,suffix-tree,Java,Algorithm,String,Suffix Tree,我正在寻找一个简短、简单的Java后缀树构建/使用算法。到目前为止,我发现的最好的工具是语义发现工具包,但是它的实现有几千行,并且跨越了几个类。理想情况下,实现将尽可能短,并且跨度不超过几百行 Karkkainen和妮其·桑德斯的文章“简单线性工作后缀数组构造”以50行C++结尾。您可能还需要一些东西来生成LCP阵列。通过谷歌搜索“在线性时间内计算LCP数组,给定S和后缀数组POS”,您应该会发现这一点。您也可以使用,但这不是Ukkonen的算法-与所有其他简单方法一样,它在二次时间内运行。我同

我正在寻找一个简短、简单的Java后缀树构建/使用算法。到目前为止,我发现的最好的工具是语义发现工具包,但是它的实现有几千行,并且跨越了几个类。理想情况下,实现将尽可能短,并且跨度不超过几百行


Karkkainen和妮其·桑德斯的文章“简单线性工作后缀数组构造”以50行C++结尾。您可能还需要一些东西来生成LCP阵列。通过谷歌搜索“在线性时间内计算LCP数组,给定S和后缀数组POS”,您应该会发现这一点。

您也可以使用,但这不是Ukkonen的算法-与所有其他简单方法一样,它在二次时间内运行。我同意,一个简单的算法(对于较短的序列可能可以正常工作)最多可以在半天内编写。

我刚刚完成了后缀树的Java实现。在my中,您可以了解有关后缀树的更多信息,了解如何使用my library,以及使用Subversion和Maven下载和构建库。是的,它比单个类文件中的几行还要长,但是它是高度文档化的,并且是为在现实世界中用于实际目的而创建的。此外,它使用Ukkonen方法进行线性时间构造。(这里提到的大多数实现至少有O(n^2)个运行时间。)

没有,但我不久前用ruby写了一个。如果您想要一个简短的实现,您可能应该自己编写它。。。char[]c=string.toCharArray();对于(inti=c.length-1;i>=0;i++)递归(c[i])…将其作为答案发布,以便我可以对其进行投票。我只需要能放在一张纸上的东西,我可以很容易地参考。很快,我将需要能够用最少的文档生成许多算法,因此短实现是好的实现。+1尽管OP没有指定可伸缩性/性能作为标准,但这些几乎总是适合我的;因此,重要的是获得线性时间-因此Uknonnen的方法。当包括这些标准时,这是一个高质量的答案。