形式语言与自动机理论初学

学习的网站是中国大学MOOC

  • 第一道例题:

image

答案:

1. 接受空语言 ∅ 的 DFA

没有终态,任何串都不接受
 
image

2. 只接受空串 ε 的 DFA

初始状态是终态,输入 0/1 后进入死态
image
 
  • 第二道例题:
image

解题思路

要设计这个 DFA,关键在于理解如何判断一个二进制数是否能被 3 整除。我们可以利用模运算的性质来构建状态。
一个二进制数除以 3 的余数只有三种可能:0、1、2。我们可以用这三个余数来定义 DFA 的三个状态。
  • 状态 q₀: 表示当前读入的二进制串所代表的数,除以 3 的余数为 0。
  • 状态 q₁: 表示当前读入的二进制串所代表的数,除以 3 的余数为 1。
  • 状态 q₂: 表示当前读入的二进制串所代表的数,除以 3 的余数为 2。
状态转移逻辑:
当我们在一个已有的二进制数后面添加一个新的比特位(0 或 1)时,新数的值会发生变化。
假设当前数为 N,其二进制表示为 b_k...b_1b_0
  • 如果读入 0,新数变为 N' = N * 2 + 0 = 2N
  • 如果读入 1,新数变为 N' = N * 2 + 1 = 2N + 1
我们需要根据 N 除以 3 的余数,来确定 N' 除以 3 的余数。
  1. 如果当前状态是 q₀ (N % 3 = 0)
    • 读入 0N' = 2N。因为 N 是 3 的倍数,2N 也是 3 的倍数。所以 N' % 3 = 0。转移到 q₀
    • 读入 1N' = 2N + 1。因为 N 是 3 的倍数,2N 也是 3 的倍数,所以 2N + 1 除以 3 余 1。转移到 q₁
  2. 如果当前状态是 q₁ (N % 3 = 1)
    • 读入 0N' = 2N。因为 N % 3 = 1,所以 2N % 3 = 2 * 1 % 3 = 2。转移到 q₂
    • 读入 1N' = 2N + 1。因为 N % 3 = 1,所以 (2N + 1) % 3 = (2 * 1 + 1) % 3 = 3 % 3 = 0。转移到 q₀
  3. 如果当前状态是 q₂ (N % 3 = 2)
    • 读入 0N' = 2N。因为 N % 3 = 2,所以 2N % 3 = 2 * 2 % 3 = 4 % 3 = 1。转移到 q₁
    • 读入 1N' = 2N + 1。因为 N % 3 = 2,所以 (2N + 1) % 3 = (2 * 2 + 1) % 3 = 5 % 3 = 2。转移到 q₂

最终 DFA 定义

根据以上分析,我们可以定义这个 DFA 为 M = (Q, Σ, δ, q₀, F)
  • 状态集 Q: {q₀, q₁, q₂}
  • 字母表 Σ: {0, 1}
  • 起始状态: q₀ (因为初始时,可以认为数值为 0,0 除以 3 余 0)
  • 接受状态集 F: {q₀} (因为我们要接受的是除以 3 余数为 0 的数)
  • 转移函数 δ:
表格
 
当前状态 输入 下一状态
q₀ 0 q₀
q₀ 1 q₁
q₁ 0 q₂
q₁ 1 q₀
q₂ 0 q₁
q₂ 1 q₂
这个 DFA 就可以准确地接受所有代表 3 的倍数的二进制字符串。
 
  • 第三道例题:
image
这个案例对于理解DFA的确定性和非确定性非常有帮助。
 
image
 
  • 第四道:
image
本次学习的是对于2Q如何进行理解
这张图片展示的是计算机科学中形式语言与自动机理论里的一个数学公式,它定义了非确定有限自动机(NFA)的扩展转移函数

符号解析

image
其中,关于2Q的理解如下:
image
  • 第五道:
 
image
image
首先理解一下image这个数学集合论公式的意思:
在数学公式中,这种写法叫做索引限制条件。它告诉我们要对这个符号进行多少次操作,以及每次操作针对的对象是什么。
image
image
有了以上的积累和沉淀之后,对整个推理过程进行解析,如下
image
另一种解题思路:
 
我们按字符串 10 的顺序,一步步追踪状态转移:
 

第一步:从 处理字符 1

 
  • 上,输入 1 有两种转移:
    1. 留在 (自环)
    2. 转移到
     
  • 此时能到达的状态集合:
 

第二步:从 处理字符 0

 
分别看每个状态对 0 的转移:
 
  • 输入 0:只能留在
  • 输入 0:可以转移到 0 都能走这条边)
  • 合并所有可达状态:
 
 
 
 
posted @ 2026-04-17 13:50  chenlight  阅读(5)  评论(0)    收藏  举报