【问题标题】:Find the overlap of a set of equal length string?找到一组等长字符串的重叠部分?
【发布时间】:2012-05-25 03:20:54
【问题描述】:

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

abcdefghi

fghixyzyz

ghiabcabc

zyzdddxfg

。 . .

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

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

【问题讨论】:

标签: string algorithm string-comparison overlap stringcollection


【解决方案1】:

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

遵循通用后缀树中字符串 y 的路径标签。这条路径上与字符串 x 的终端符号相关的最深节点有一个路径标签,相当于后缀-前缀重叠 x->y。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2020-02-12
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多