【发布时间】:2016-05-16 08:34:14
【问题描述】:
我正在寻找可以从文件中提取所有常见模式的算法,天真的算法需要 O(n^2)。要找出所有常见模式,我需要生成所有子字符串并在另一个给定文件中检查它。我正在寻找一些数据结构或算法,这样就不需要生成所有子字符串。是否有任何高效和优雅的算法。
为简单起见,我们将文件视为字符串。假设我们必须字符串 str1 = "xxabcyy" 和 str2="sydabcdy" 所以预期的输出是 {"abc","y"}。天真的方法是将 str1 的每个子字符串与 str2 进行比较。例如,我有 str1 的所有可能子字符串,即 {"x","xx","xxa","xxab","xxabc","xxabcy","xxabcyy ","xa","xab",..} 然后检查每个子字符串是否在 str2 中。
【问题讨论】:
-
无论如何,karp-rabin 可以在 O( |s| + |t| ) 中更好地完成同样的事情
-
@Roylee 我知道 karp-rabin 有 O( |s| + |t| ) 但在我的情况下,问题是找出我需要为所有子字符串生成的常见模式并与另一个给定文件匹配,模式匹配是后期。我正在寻找一些数据结构或算法,这样我就不需要生成所有子字符串了。
-
“要找出我需要为所有子字符串生成的共同模式”,我不太明白,也许你想改写一下:)
-
@Roylee 要找出常见模式,我需要生成所有可能的子字符串。为了简单起见,我们将文件视为字符串。假设我们必须字符串 str1 = "xxabcyy" 和 str2="sydabcdy" 所以预期的输出是 {"abc","y"}。天真的方法是将 str1 的每个子字符串与 str2 进行比较。例如,我有 str1 的所有可能子字符串,即 {"x","xx","xxa","xxab","xxabc","xxabcy","xxabcyy ","xa","xab",..} 然后检查每个子字符串是否在 str2 中。
-
是的,如果你有问题的例子会更好,也许你可能想重新表述你的问题,因为它模糊且难以理解,因此遭到其他人的反对。