为什么有限状态机无法识别回文序列

时间:2018-04-06 12:04:12

标签: fsm state-machine

我按照tutorial来学习有限状态机的一些知识。

它说: 不久就会意识到有限状态机无法识别回文序列。 (在语法和机器部分)。

我用google搜索了一下表达式是真的。但我不知道为什么。我认为下图可以接受回文序列,例如

ABA,(S1-a-> S2-b-> S1-a-> S2)

AABAA,(S1-a-S2-a-> S2-b-> S1-a-> S2-a-> S2)

...

我哪里错了?

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为其原因可能是这样的

  1. FSM并非旨在记住大量信息。 FSM甚至需要记住一个字母的状态也会成倍增加。
  2. 回文字符串的行为就像一面镜子。在某一点,字母表会根据中心重复出现。 例如:abcba->中心为c。 FSM无法确定性地找到该中心点,因为它们没有在堆栈中存储有关该中心的其他信息。 (按下自动机具有此功能)
  3. 假设有一种存储中点的机制。即使这样,FA仍在努力回溯先前的状态,并找出中点之后的下一个字母是否与先前输入的中点之前的字母匹配。 (再次没有堆栈来存储以前的输入,这很困难)

所以FA不太可能识别回文症

现在来看您的例子,

FA仅在最后一个字母达到可接受的状态时才接受语言。让我们以AABAA为例。与S1或S2一起工作的四个图应处于接受状态。假设S2是接受状态,S1是初始状态。

然后是S1 --a-- S2(1)--a-- S2(2)--b-- S1 --a-- S2(3)--a--S2(4)

由于S2为接受状态,FA将接受以下字符串

  • (1)'a'
  • (2)'aa'
  • (3)'aaba'
  • (4)'aabaa'

如您所见,即使它接受回文,它也接受其他字符串。原因是,FA无法区分特定字母的前后。需要额外的堆栈内存来处理这些事情(PA具有此功能)