我的转换函数是否正确(字符串与有限自动机匹配)

时间:2015-08-13 02:01:24

标签: algorithm string-matching finite-automata clrs

我正在学习CLRS与有限自动机的字符串匹配。我正在解决一些运动问题。对于运动问题32.3-1,

  

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

以下是我的过渡功能

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

我的过渡功能是否正确?我如何填写最后一行?任何帮助

1 个答案:

答案 0 :(得分: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是您的接受状态。只有在字符串中找到所需的模式后,才会达到此状态。一旦找到模式,无论字符串保持在接受状态。因此,状态a上的输入b5都保留在5本身上。

过渡功能是fa接受带有子字符串' aabab '的字符串。如果您要返回状态1表示a0表示b,则转换函数会接受以子字符串结尾的字符串' aabab &#39 ;.鉴于只有州5是接受国。