繁体   English   中英

模比较的确定性有限状态自动机

[英]Deterministic Finite State Automata for Modulo Comparison

我正在为以下问题创建确定性有限状态自动机:

您可以创建由 x 和 y 组成的字符串。 当(x's mod 4)的数量大于(y's mod 4)的数量时,如何创建仅接受语言的图表?

我目前能够理解的是,我需要创建一个类似于下图的图表:

>(0,0) -b-> (0,1) -b-> (0,2) -b-> (0,3) -b-> (0,4)
   a          a          a          a          a
 (1,0) -b-> (1,1) -b-> (1,2) -b-> (1,3) -b-> (1,4)
   a          a          a          a          a
 (2,0) -b-> (2,1) -b-> (2,2) -b-> (2,3) -b-> (2,4)
   a          a          a          a          a
 (3,0) -b-> (3,1) -b-> (3,2) -b-> (3,3) -b-> (3,4)
   a          a          a          a          a
 (4,0) -b-> (4,1) -b-> (4,2) -b-> (4,3) -b-> (4,4)

但我不明白的是如何比较 x 和 y 相对于彼此出现的次数。

我尝试通过转换表而不是使用转换图来定义 DFA 行为来回答您的问题 - 表更容易在此处键入,并且在功能上等同于相应的转换图。

在下表中

  • 第一列列出了所有州; 每个状态都由一个有序对表示,其元素分别表示到目前为止读取的x的数量和y的数量
  • 第二列和第三列分别包含当 DFA 处于表格第一列所示状态时读取xy时达到的状态
  • 黄色突出显示的状态是接受状态:如果 DFA 在检查字符串中的最后一个符号后处于其中一种状态,则接受该字符串,即它属于该语言。

在此处输入图像描述

查看此表,您应该能够轻松地调整图表以使事情正常工作。 例如,表中的第一行对应于图表的以下部分

>(0,0) -y-> (0,1)
   x
 (1,0)

您几乎已经得出了问题本身的答案。

首先,您会看到需要哪些状态。 您需要计算 n(x) mod 4。这需要 4 个状态。 然后你需要计算 n(y) mod 4。这也需要 4 个状态。 现在,由于您需要同时计算两者,因此您必须将它们相交。 这将导致 4 x 4 = 16 个状态。 让我们将这些状态命名为(a, b); a = n(x) mod 4, b = n(y) mod 4 (a, b); a = n(x) mod 4, b = n(y) mod 4

然后,您决定什么是初始状态,什么是最终状态。 在这种情况下,初始状态为(0,0) ,最终状态为{ (a,b) : a > b }

所以,这就是你最终得到的: 结果 DFA DFA 抽屉链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM