Algorithm KMP算法最坏情况分析
我不明白国民党是如何维持O(m+n)的。我在找“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAlgorithm KMP算法最坏情况分析,algorithm,time-complexity,string-search,knuth-morris-pratt,Algorithm,Time Complexity,String Search,Knuth Morris Pratt,我不明白国民党是如何维持O(m+n)的。我在找“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 图案:AAB(长度n) 字符串:aaaaaaaaaa。。。(长度m) 那么前缀表将是 aaaab 01230 每次“b”上发生不匹配时,其前缀长度始终为0。因此,模式只向
- 图案:AAB(长度n)
- 字符串:aaaaaaaaaa。。。(长度m)
谁能给我解释一下KMP是如何得到O(m+n)的?提前感谢。诀窍在于,当遇到不匹配时,不要只将字符串中的位置提前1个字符。KMP旨在避免这样做。在您的示例中,不匹配发生在连续4次匹配a之后。这4个a中没有b,因此可以将字符串中的搜索位置提前4,而不是1。你继续这样做,最终得到O(m) 为了使所有这些都起作用,KMP使用该模式预计算助手表。此表基本上会告诉您,对于模式中给定位置发生的不匹配,字符串中的位置要前进多少。结果表明,该表也是以线性时间O(n)构建的
有关示例、详细信息和(伪)代码,请参见wikipedia和其他地方。诀窍在于,当遇到不匹配时,不要将字符串中的位置提前1个字符。KMP旨在避免这样做。在您的示例中,不匹配发生在连续4次匹配a之后。这4个a中没有b,因此可以将字符串中的搜索位置提前4,而不是1。你继续这样做,最终得到O(m) 为了使所有这些都起作用,KMP使用该模式预计算助手表。此表基本上会告诉您,对于模式中给定位置发生的不匹配,字符串中的位置要前进多少。结果表明,该表也是以线性时间O(n)构建的 有关示例、详细信息和(伪)代码,请参见wikipedia和其他地方