2012-05-09 41 views
5

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

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

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

回答

3

KMP计算字符串所有前缀的边界,它们本身就是字符串算法中的关键概念。 (计算全词本身是平凡的边界,和KMP(故障功能)是这样做的标准!)

小号边框很简单,既是一个前缀和S后缀的单词

正如你正确地注意到,以计算边界能力的优秀应用是计算最小的字符串u这样的可能性,即对一些自然ķ瓦特^K = 小号对于给定的字符串小号。这被称为s的原始根

原因是边界和字符串周期之间的对偶性。一个字符串小号是任何字符串瓦特小号这样小号是字符串WWWW ...例如前缀,ABC不再是一个句点abcabcab。事实证明,一个词的边界和句点之间有1:1的对应关系;在上例中,请注意abcab的边界abcabcab。在一般情况下,只要瓦特是一段小号,然后串的,从一开始W¯¯去除后仍从小号瓦特^-1 小号)是小号边框。同样,如果瓦特是从小号仍然当您删除后缀瓦特是一段小号小号,那么这个词的边界。

期间是分析字符串属性的重要工具。例如,它们用于查找字符串中重复(运行)的算法;概述参见this paper.