KMP算法:最坏情况

时间:2015-10-23 12:14:54

标签: algorithm

我对Knuth Morris Pratt字符串匹配算法的最坏情况运行时间有疑问:

让我们说T = AAAAB和P = AB。

在这种情况下,前缀表是:

#P Sk-D

0 A 0

1 B 0

当我扫描T并比较P的值时: AAAAB AB Cell#0有部分匹配。由于P的Cell#0的跳过距离为0,我们将P移动到下一个单元: AAAAB   AB

因此,相同的场景将重复三次(6次比较),直到T匹配子串," AB"在P(2更多的比较)。总共有8个比较= P的长度* T的长度 - T的长度= 5 * 2 - 2 = 8 = O(mn)-O(m)= O(mn)。显然,这不是O(m + n),这是KMP算法的最坏情况。

我做错了什么?我觉得我的前缀表是不正确的,但是如果我遵循P中最长后缀的定义,那么我在前缀表中看不到任何其他值,这也是P"中的前缀。

如果有任何帮助,我将不胜感激。

谢谢!

0 个答案:

没有答案