当前位置: 首页 > news >正文

【程序语言与编译】 有限自动机(DFA与NFA)

适合读者:软考中级备考同学
阅读时间:3.5分钟
内容:DFA与NFA的定义、区别、等价转换、例题


1. 什么是有限自动机?

有限自动机(Finite Automaton, FA)是一种识别器,用于判断一个输入字符串是否属于某正规集。它是词法分析的核心工具,也是软考中常考的内容。

有限自动机分为两类:

  • 确定型有限自动机(DFA,Deterministic Finite Automaton)
  • 非确定型有限自动机(NFA,Nondeterministic Finite Automaton)

二者识别能力等价(任何NFA都可以转换为等价的DFA),但DFA更适合实际实现,NFA更方便人工构造。


2. DFA(确定型有限自动机)

2.1 形式定义

DFA是一个五元组:

M=(Q,Σ,δ,q0,F)M = (Q, \Sigma, \delta, q_0, F)M=(Q,Σ,δ,q0,F)

其中:

  • QQQ:有限的状态集合
  • Σ\SigmaΣ:有限的输入字母表
  • δ\deltaδ确定的转移函数,δ:Q×Σ→Q\delta: Q \times \Sigma \rightarrow Qδ:Q×ΣQ(每个状态和输入符号唯一确定下一个状态)
  • q0q_0q0:初始状态,q0∈Qq_0 \in Qq0Q
  • FFF:终止状态集合,F⊆QF \subseteq QFQ

2.2 特点

  • 对于当前状态和输入符号,有且只有一个下一状态。
  • 状态转移图中,每个结点的出边在相同输入符号上最多一条。
  • 实现简单,模拟运行速度快。

2.3 示例

DFA识别所有以01结尾的二进制串:

状态转移表:

状态输入0输入1
AAB
BCB
CAB

初始状态AAA,终止状态CCC


3. NFA(非确定型有限自动机)

3.1 形式定义

NFA同样是一个五元组:

M=(Q,Σ,δ,q0,F)M = (Q, \Sigma, \delta, q_0, F)M=(Q,Σ,δ,q0,F)

区别在于转移函数δ\deltaδQ×(Σ∪{ε})→2QQ \times (\Sigma \cup \{\varepsilon\}) \rightarrow 2^QQ×(Σ{ε})2Q(映射到状态集合的子集,而不是单个状态)。

3.2 特点

  • 从当前状态读入一个符号后,可能进入多个下一状态(不确定性)。
  • 允许ε\varepsilonε转移(不读入任何符号即可跳转)。
  • 只要存在一条路径能到达终止状态,NFA就接受该输入串。

3.3 示例

NFA识别以01结尾的串(比DFA更简洁):

状态图:A→0AA \xrightarrow{0} AA0AA→1AA \xrightarrow{1} AA1AA→0BA \xrightarrow{0} BA0BB→1CB \xrightarrow{1} CB1C(C为终止)。注意从A读0既可以留在A也可以到B,这是非确定性。


4. DFA与NFA对比表

对比项DFANFA
下一状态唯一多个或零个
ε\varepsilonε转移不允许允许
状态数较多较少(通常)
构造难度较难(手动)容易(直观)
模拟运行快(无回溯)慢(需回溯或子集构造)
识别能力相同相同(等价)

5. NFA转DFA(子集构造法)

核心思想:将NFA的一个状态子集看作DFA的一个状态。

算法步骤

  1. 从初始状态出发,求其ε\varepsilonε闭包(即通过任意步ε\varepsilonε转移能到达的所有状态集合),作为DFA的初始状态。
  2. 对每个DFA状态(即一个NFA状态集),对于每个输入符号aaa,计算该状态集中所有状态读入aaa后能到达的状态的ε\varepsilonε闭包,得到新的状态子集。若新子集未出现过,则添加到DFA中。
  3. 重复直到没有新状态产生。
  4. 若某个DFA状态包含至少一个NFA的终止状态,则该DFA状态为终止状态。

简例(NFA见3.3示例):

  • 初始状态集{A}\{A\}{A}ε\varepsilonε闭包还是{A}\{A\}{A}
  • 读0:从A出发,0可到A和B →{A,B}\{A,B\}{A,B}闭包(无ε\varepsilonε)→{A,B}\{A,B\}{A,B}
  • 读1:从A出发,1可到A →{A}\{A\}{A}
  • 对新状态{A,B}\{A,B\}{A,B},读0:从A到A,B,从B无0转移 →{A,B}\{A,B\}{A,B};读1:从A到A,从B到C →{A,C}\{A,C\}{A,C}
  • {A,C}\{A,C\}{A,C}读0:从A到A,B,C无0 →{A,B}\{A,B\}{A,B};读1:从A到A,C无1 →{A}\{A\}{A}
  • 最终DFA包含状态{A}\{A\}{A}(初始),{A,B}\{A,B\}{A,B}{A,C}\{A,C\}{A,C}(终止)。可重命名。

6. 经典例题

题目1:已知NFA的状态转换图如下(文字描述):状态A初始,A读0可到A和B,A读1到A;B读1到C;C无转移。求该NFA对应的DFA。

(解即为5中的示例,答案为DFA状态集和转移。)

题目2:以下关于DFA和NFA的描述,正确的是( )。
A. NFA的识别能力比DFA强
B. DFA不允许ε\varepsilonε转移
C. 每个NFA都可以转换为等价的DFA
D. DFA的状态数一定小于NFA

答案:B和C(A错,能力等价;D错,DFA状态数可能指数增长)


题目3:给定DFA,初始状态0,终止状态2,转移:0读a到1,0读b到0;1读a到2,1读b到1;2读a到2,2读b到2。判断字符串aaba是否被接受。

:从0开始:a→1;a→2;b→2;a→2。最终在状态2(终止),接受。
答案:接受


7. 记忆口诀

DFA确定唯一路,NFA多路可空跳。
子集构造换等价,识别能力一样高。


8. 给备考同学的一句话

有限自动机是词法分析的数学模型。软考中常见:

  • 给定状态图或转移表,判断DFA/NFA类型。
  • NFA转DFA(子集构造法,只需理解概念,很少要求完整手工计算复杂例子)。
  • 模拟DFA运行,判断字符串是否被接受。

记住:DFA实现简单,NFA构造方便,二者等价。理解子集构造法的思想,考试时遇到相关选择题就能应对。


🔔本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订阅

#软考中级 #软件设计师 #有限自动机 #DFA #NFA #词法分析

http://www.rkmt.cn/news/1507353.html

相关文章:

  • 突破性音乐自由方案:一站式解锁全网高品质无损音乐体验
  • 终极便携C/C++开发工具包:5分钟搭建Windows专业开发环境
  • 优质后塍办理公司注销业务企业排名前十哪家强 - 品牌排行榜
  • 别再问怎么连PLC了!手把手教你用Python+SMLP协议读写三菱FX5U数据
  • 用Qt和RKNN在飞凌OK3568上搞个USB摄像头实时AI识别(附完整代码和避坑指南)
  • 2026论文双降终极榜单:10款降AI率工具, 合规修正一路顺畅
  • 2026年绵阳高空作业车出租市场观察:服务能力与项目实绩的多维分析 - 优质品牌商家
  • 2026年河南工科类大学与应急电力服务商深度观察:安阳工学院及行业伙伴全景测评 - 优质品牌商家
  • 别再死记硬背了!用Python+NumPy手把手带你理解卷积码的编码过程(附代码)
  • 汽车级LCD驱动芯片PCA85262:从原理到实战的嵌入式显示方案
  • 2026健身房加盟做哪个品牌好?行业资深从业者分析 - 品牌排行榜
  • 苹果WWDC 2026:Gemini驱动Siri登场,端侧AI重塑智能生态
  • 怎样免费听遍全网音乐?5个高效使用洛雪音乐助手的秘诀
  • 从零理解PID自整定:用C语言模拟一个水温控制系统(增量式 vs 位置式)
  • 2026年南通工厂如何破局?选对短视频运营公司是抢占增长先机的关键一步 - 品牌鉴赏官2026
  • 字画真假鉴别实战教程 五步肉眼辨真伪 新手也能上手 - 深鉴新闻
  • ShawzinBot终极指南:3步实现Warframe MIDI音乐自动演奏
  • 【极致低延时】香橙派部署 MediaMTX 实现 WebRTC 推流,延时仅 500-800ms,比局域网 ffmpeg 拉流快近 10 倍!(附踩坑全记录)
  • 保姆级教程:想自己动手评估模压玻璃透镜?先弄懂这4个关键工艺参数
  • 【课程设计/毕业设计】基于SpringBoot+Vue艺术作品展示平台的设计与实现基于SpringBoot的艺术作品展示平台的设计与实现【附源码、数据库、万字文档】
  • 从PCA9545A实例解析SMT焊接工艺:波峰焊与回流焊的选型及焊盘设计
  • 上海智位机器人(DFRobot) 发布 seeMote Cap 与 seeMote Cube,帮助 Apple Vision Pro 开发者把真实工具带入 visionOS 应用
  • 2026年四川智慧污水处理品牌全景分析:技术、案例与选型指南 - 优质品牌商家
  • 科技局如何解决政策资金“撒胡椒面”问题?
  • 北京正规回收字画公司排行榜2026年最新推荐 - 品牌排行榜
  • 2026年建筑工程设计资质齐全的公司推荐 - 品牌排行榜
  • Everspin存储代理,Everspin MRAM芯片44-TSOP2封装结构
  • MPC8568E/MPC8567E时钟系统与热管理设计实战指南
  • NXP PCA85162段码LCD驱动芯片:汽车级应用与I2C接口详解
  • Everspin代理MRAM芯片48-BGA封装高性能存储方案