有100万个等长字符串(短字符串)。例如
ABCDEFGHI
fghixyzyz
ghiabcabc
zyzdddxfg
。 。
我想找到两个字符串的成对重叠.A“abcdefghi”和B“fghixyzyz”的重叠是 “fghi”,它是A的最大后缀,B的最大前缀,满足后缀,前缀相等。
是否有有效的算法可以找到集合中任意两个字符串的重叠?
答案 0 :(得分:0)
其中一种有效的方法是为字符串集构建通用后缀树。要找到字符串x和y之间的重叠:
遵循常规后缀树中字符串y的路径标签。沿着此路径入射到字符串x的终端符号的最深节点具有路径标签,该路径标签等同于后缀前缀重叠x-> y。
有关详细信息,请参阅Gusfield的书“字符串,树和序列上的算法”中的第137页(“解决线性时间内的所有对后缀前缀问题”)。
警告:如果您的数据集很大(数百万/数十亿字符串),则会占用大量内存。