KMP 算法的跳跃容易出错吗?



让我们考虑一个示例:text =" aabcaabdcaab",模式=" aabcaab"

在此示例中,该模式将匹配以索引= 0
AABCAAB DCAAB
AABCAAB

根据KMP算法,当j =图案长度时,我们找到了匹配和重置j = lps [模式长度-1] = 3,这意味着模式[J] ='C'

该算法跳跃:
aabcaab d caab
_____ aab c aab

没有考虑跳跃之间的情况,例如:
aabcaabdcaab
_aabcaab

aabcaabdcaab
__AABCAAB
...

在这种情况下,是否可以忽略一些匹配?

在所有情况下,KMP算法都可以正常工作。其背后的主要思想是,如果您匹配了模式的第一个K字符,则知道文本的K字符,因为它们完全匹配了这些K字符。计算了移位表,以便考虑到这些K字符的知识,在您匹配k字符时要使用的偏移。

在您的示例中,您刚刚匹配了Aabcaab,因此您知道文本是Aabcaab。您刚刚匹配的模式中只有一个C给您下一个尝试的比赛位置。

(我注意到,通常描述了KMP算法,并证明并不是对模式进行不规则的变化,而是沿着文本进行定期踩踏并弄清楚到目前为止的图案中有多少个字符。因为那里是匹配的。是使用该算法的视图的证据,我们知道它在所有情况下都可以使用(。

最新更新