【问题标题】:Pattern matching with finite automata有限自动机的模式匹配
【发布时间】:2015-05-06 14:47:49
【问题描述】:

最近我在阅读著名的算法设计书籍 CLRS(Cormen, Leiserson, Rivest, Stain, 3-rd edition)。在经典的 KMP 和 Rabin-Karp 算法之间,有一部分是关于有限自动机的字符串匹配。因此算法根据模式创建自动机并开始对字符串进行处理。

所以在这个例子中,算法在输入字符串中搜索模式“ababaca”。所以在我看来一切都是合乎逻辑的,除了两件事。

为什么当我到达“b”时没有从状态 4 到先前状态的路径,因为在那种情况下我将有“abbabb”,这已经是不匹配的????当我从状态 6 中读取“b”或“c”时会发生什么?有什么我误解了吗?也没有从状态 0 到 4 等读取“c”的情况..

【问题讨论】:

  • 如果您读取的字符与当前状态没有边,那么您将返回状态 0。到目前为止您处理的字符串的任何后缀都不能作为匹配的前缀。

标签: c++ regex algorithm pattern-matching finite-automata


【解决方案1】:

检查表 (b)。 你所说的所有状态都标记为 0。所以你回到开头。 在图像中,您会得到很多边缘回到 0,因此它们不会显示(为了清晰起见)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多