【问题标题】:What is the worst case for KMP string search algorithm? [closed]KMP 字符串搜索算法的最坏情况是什么? [关闭]
【发布时间】:2011-10-20 16:33:28
【问题描述】:

谁能建议我一个最坏的情况“文本字符串 - 模式对”来测试 KMP 算法实现?

【问题讨论】:

  • KMP 具有线性运行时复杂性,因此任何以目标结尾的字符串都将在最坏情况下运行。如果你的实现是一个多重查找,那么每个案例都在线性时间内运行。
  • 我将在这里写下我的答案,因为问题已经结束:在他们的论文“字符串中的快速模式匹配”中,Knuth、Morris 和 Pratt 证明了算法的最坏情况是定义为的斐波那契字符串$ \phi_1 = b, \phi_2 = b, \phi_n= \phi_{n-1}\phi_{n-2} $ 查看第 5 节。论文的理论考虑。

标签: algorithm testing complexity-theory


【解决方案1】:

我会说这样的模式

xx........x
| n times |

和类似的字符串

xxx.........xyx...........xy....
| n-1 times | | n-1 times |

将是最糟糕的情况之一,但它仍然是O(m+n)

【讨论】:

  • 每当发生不匹配时,我们都会根据前缀-后缀匹配表将模式字符指针向左移动。对于您在每个 y 字符的答案中的示例,我们发现不匹配,并且我们不断将模式 1 字符的字符指针一次左移。如果文本中有 c1 没有 x 字符和 c2 没有 y 字符,我们得到的比较总数是 ( c1+ c2 *pattern size)。我说的对吗?
【解决方案2】:

您可以在此处找到有关 KMP 算法的任何内容:

KMP ALGORITHM

快速提取:

Knuth、Morris 和 Pratt 发现了第一个线性时间字符串匹配 通过对朴素算法进行严格分析。 Knuth-Morris-Pratt 算法保留了幼稚方法的信息 在文本扫描期间收集的浪费。通过避免这种浪费 信息,它实现了 O(n + m) 的运行时间,这是最优的 在最坏的情况下。 也就是说,在最坏的情况下,Knuth-Morris-Pratt 算法我们必须检查文本中的所有字符和 图案至少一次。

你应该能够校准你对算法的理解,并在那里找到你需要的东西。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2011-06-22
    • 2011-03-12
    • 2014-08-01
    • 1970-01-01
    相关资源
    最近更新 更多