找到一组等长字符串的重叠?

时间:2012-05-25 03:20:55

标签: string algorithm string-comparison overlap stringcollection

有100万个等长字符串(短字符串)。例如

ABCDEFGHI

fghixyzyz

ghiabcabc

zyzdddxfg

。 。

我想找到两个字符串的成对重叠.A“abcdefghi”和B“fghixyzyz”的重叠是 “fghi”,它是A的最大后缀,B的最大前缀,满足后缀,前缀相等。

是否有有效的算法可以找到集合中任意两个字符串的重叠?

1 个答案:

答案 0 :(得分:0)

其中一种有效的方法是为字符串集构建通用后缀树。要找到字符串x和y之间的重叠:

遵循常规后缀树中字符串y的路径标签。沿着此路径入射到字符串x的终端符号的最深节点具有路径标签,该路径标签等同于后缀前缀重叠x-> y。

有关详细信息,请参阅Gusfield的书“字符串,树和序列上的算法”中的第137页(“解决线性时间内的所有对后缀前缀问题”)。

警告:如果您的数据集很大(数百万/数十亿字符串),则会占用大量内存。