【发布时间】: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