我无法理解 KMP 如何保持 O(m+n)。我正在“aaaaaaaaaa ...”中寻找模式“aaaab”。
- 模式:aaaab(长度 n)
- 字符串:aaaaaaaaaa...(长度 m)
那么前缀表将是
aaaab
01230
每次在“b”上发生不匹配时,它的前缀长度始终为 0。所以模式只向右移动了一步。
啊啊啊啊……
aaaab
啊啊啊啊……
_aaaab
啊啊啊啊……
__aaaab
对于每次试验,我都需要比较完整的 n 次,因为不匹配发生在最后一个“b”。因此它仍然需要 O(m*n) 比较。
谁能解释一下 KMP 是如何为我得到 O(m+n) 的?提前致谢。