【问题标题】:Is my transition function correct (String matching with finite automata)我的转换函数是否正确(与有限自动机匹配的字符串)
【发布时间】:2015-08-13 02:01:23
【问题描述】:

我正在学习使用 CLRS 的有限自动机进行字符串匹配。我正在解决一些练习题。对于练习题32.3-1,

为模式 P = aabab 构造字符串匹配自动机并说明 它对文本字符串 T = aaababaabaabaabaab 的操作。

以下是我的过渡函数,

states   a   b
 0       1   0
 1       2   0
 2       2   3
 3       4   3
 4       4   5
 5       ?   ?

我的转换函数正确吗?我如何填写最后一行?任何帮助

【问题讨论】:

  • 你的过渡函数有误。在状态 3 中,当遇到 b 时,状态应该回到 0。在状态 4 中,当遇到 a 时,状态应该回到 2。
  • @HuStmpHrrr 感谢您的回复 :).. 你能详细说明一下吗?我的意思是在状态 3 遇到 b 时,匹配字符串后缀的最长模式前缀是 "aab" ,因此它应该回到状态 3,它怎么能回到 0.Silmilarly 在状态 4 ,当遇到a,匹配文本后缀的模式的最长前缀是“aaba”,因此它应该回到状态4,它怎么能回到状态2..如果我理解错误,请纠正我.

标签: algorithm string-matching finite-automata clrs


【解决方案1】:

我假设您正在创建一个有限自动机,它接受包含模式 aabab 的字符串。

你的有限自动机有两个错误,

在状态 3 和状态 4,

对于状态3,如果输入为b,则必须返回状态0。 例如,模式aabb 将强制您返回状态0。 在这里你必须从状态0重新开始。

对于状态4,如果输入为a,则必须返回状态2,因为 你有模式aa。例如,aabaa 模式将强制您返回状态 2

修正后的有限自动机如下,

states   a   b
 0       1   0
 1       2   0
 2       2   3
 3       4   0
 4       2   5
 5       5   5

这里的 5 是您的接受状态。只有在字符串中找到所需的模式时,您才会达到此状态。一旦找到模式,无论字符串保持在接受状态。因此,对于状态 5 上的两个输入 ab 仍保持在 5 本身上。

转换函数是 fa 接受带有子字符串 'aabab' 的字符串的函数。如果您要返回状态 1 用于 a0 用于 b,则转换函数接受以子字符串 'aabab' 结尾的字符串。鉴于只有状态 5 是接受状态。

【讨论】:

  • 感谢您的回复 :)... state 5 的一个说明,对于 a 应该是 10 表示 b 根据 CLRS 页号 1001 中给出的伪代码?如果我错了,请纠正我!
  • @402951 看来您的问题已得到解答。如果你到达状态 5,你应该留在那里,因为匹配已经找到并且不应该采取进一步的行动。该程序已接受您的输入,应该就是这样。
猜你喜欢
  • 1970-01-01
  • 2016-08-17
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2021-12-18
  • 1970-01-01
  • 2012-06-06
相关资源
最近更新 更多