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

Is my transition function correct (String matching with finite automata)

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

Construct the string-matching automaton for the pattern P = aabab and illustrate its operation on the text string T = aaababaabaababaab.

下面是我的转换函数,

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

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

我假设您正在创建一个有限自动机,它接受包含模式 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 是你的 Accepting 状态。只有当您在字符串中找到所需的模式时,您才会达到此状态。一旦找到一个模式,不管字符串是什么都保持在接受状态。因此,对于两个输入 ab 状态 5 仍然在 5 本身。

转换函数是 fa 接受带有子字符串 'aabab' 的字符串。如果要返回状态 1 for a0 for b,则转换函数接受以子字符串 'aabab[ 结尾的字符串=51=]'。假设只有状态 5 是接受状态。