我们为什么不这样转?

时间:2012-11-01 12:28:23

标签: algorithm string-matching knuth-morris-pratt

在研究字符串的 Knuth-Morris-Pratt算法时:

ABC ABCDAB ABCDAB

表示模式:

ABCDABD

我被困在一步。我将突出显示我目前陷入困境的步骤。

ABC ABCDAB ABCDAB
ABCDABD

ABC ABCDAB ABCDAB
   ABCDABD

ABC ABCDAB ABCDAB
    ABCDABD

ABC ABCDAB ABCDAB
        ABCDABD--------------------(WHY THIS ?)

我不明白上面的步骤。我希望上面的步骤是:

ABC ABCDAB ABCDAB
          ABCDABD

请解释“正确”步骤的逻辑/原因。

1 个答案:

答案 0 :(得分:1)

当与'D'比较时,它会发现不匹配。并且该算法“记住”先前的“AB”被比较,因此需要检查不匹配的字符是否为“C”。

“算法导论”一书中解释了KMP方法的概念。它与无限状态机方法非常相似,可以帮助您理解它。