【问题标题】:why do not we shift this way?我们为什么不这样转变?
【发布时间】:2012-10-22 00:59:22
【问题描述】:

在研究 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

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

【问题讨论】:

  • 模式中的第二个 AB 匹配 ,所以我们移动使得第一个 AB 现在是第二个 AB 的位置。为什么你认为我们可以进一步转移?
  • @n.m.你能告诉我在使用 knuth morris 算法时要查找的标准吗?虽然我尝试阅读wikipedia article,但我并不完全理解它

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


【解决方案1】:

当 ' ' 与 'D' 比较时,它会发现不匹配。而且这个算法‘记住’之前的“AB”是比较的,所以它需要检查不匹配的字符是否是“C”。

“算法简介”一书中解释了 KMP 方法的思想。和无限状态机的方法很像,可以帮助你理解。

【讨论】:

    猜你喜欢
    • 2021-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多