KMP故障功能的应用

时间:2012-05-09 11:28:53

标签: string algorithm

关于KMP的许多文章都提到KMP本身的失败功能有很多应用。

一个这样的应用程序是找到最小的字符串,当连接k次时给出原始字符串(句点)。

但我找不到任何其他的东西。还有哪些其他问题涉及KMP故障功能?

1 个答案:

答案 0 :(得分:3)

KMP计算字符串所有前缀的边界,它们本身就是字符串算法的关键概念。 (计算整个单词本身的边界是不平凡的,而KMP(失败函数)是这样做的标准!)

s 的边框只是 s 的前缀和后缀的任何单词。

正如你正确地注意到的,计算边界能力的一个突出应用是计算最小字符串w的可能性,这样对于某些自然的k w ^ k = s 对于给定的字符串 s 。这被称为s的原始根

原因是边框和字符串句点之间的二元性。字符串 s 期间 w 不超过 s 的任何字符串,以便 s 是字符串 wwww 的前缀...例如, abc 是一段 abcabcab 即可。事实证明,边界与单词的句点之间存在1:1的对应关系;在上面的示例中,请注意 abcab abcabcab 的边框。通常,只要 w s 的句点,那么从 s 中删除 w 之后的字符串它的开头( w ^ - 1 s )是 s 的边界。同样,如果 w s 的边框,那么当您删除后缀 w s 中保留的单词 >是一段 s

句点是分析字符串属性的重要工具。它们用于例如在字符串中查找重复(运行)的算法中;有关概述,请参阅this paper.