news 2026/4/25 11:41:57

DFA(确定有限自动机)和NFA(不确定有限自动机)是形式语言与自动机理论中的核心概念

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DFA(确定有限自动机)和NFA(不确定有限自动机)是形式语言与自动机理论中的核心概念

DFA(确定有限自动机)和NFA(不确定有限自动机)是形式语言与自动机理论中的核心概念,用于识别正则语言。DFA的转换函数具有确定性,即每个状态在给定输入字符下只能转移到唯一一个状态,其定义为 $ f: S \times \Sigma \to S $。而NFA允许从一个状态在某个输入字符下转移到多个状态,转换函数为 $ f: S \times \Sigma \to 2^S $,甚至可以包含ε\varepsilonε-转移(空串转移),这使得NFA在结构上更具灵活性。

尽管NFA表现出“不确定性”,但每一个NFA都可以通过子集构造法(Subset Construction)转换为等价的DFA,因此两者在语言识别能力上是等价的,均能识别且仅能识别正则语言。在实际应用中,如编译器的词法分析阶段,通常先由正则表达式构建NFA,再转化为DFA以提高匹配效率。

# 示例:简单DFA模拟器(识别以 'ab' 结尾的字符串)defdfa_accepts(input_string):state='s0'transition={('s0','a'):'s1',('s0','b'):'s0',('s1','a'):'s1',('s1','b'):'s2',('s2','a'):'s1',('s2','b'):'s0'}forcharininput_string:if(state,char)intransition:state=transition[(state,char)]else:returnFalse# 无定义转移,拒绝returnstate=='s2'# s2 是终态print(dfa_accepts("ab"))# Trueprint(dfa_accepts("aab"))# Trueprint(dfa_accepts("abb"))# False

**确定有限自动机(DFA)和不确定有限自动机(NFA)**的计算机理论知识内容,属于程序设计语言基础中的形式语言与自动机部分,核心信息整理如下:

1. DFA的核心定义

DFA是一个五元组 ( M = (S, \Sigma, f, S_0, Z) ),其中:

  • ( S ) 是状态集合,( \Sigma ) 是输入字符集,( f ) 是转换函数,( S_0 ) 是初态,( Z ) 是终态集合。
  • 转换函数 ( f(A,a)=Q ) 表示:当前状态为 ( A )、输入字符为 ( a ) 时,转移到状态 ( Q )。

2. DFA的表示方式

  • 状态转换图:以节点表示状态,有向弧表示转换(弧上标记输入字符),双圈节点表示终态。
  • 状态转换矩阵:二维数组,行表示当前状态,列表示输入字符,元素表示转移后的状态。

3. 示例解析(图2-7)

以DFA ( M1 = ({s_0,s_1,s_2,s_3}, {a,b}, f, s_0, {s_3}) ) 为例:

  • 转换图(图2-7a):初态 ( s_0 ),终态 ( s_3 ),弧对应 ( f ) 的转换规则(如 ( s_0 ) 输入 ( a ) 到 ( s_1 ))。
  • 转换矩阵(图2-7b):行是状态,列是 ( a/b ),元素是转移后的状态(如 ( M[s_0,a]=s_1 ))。

4. DFA的语言识别

  • 若存在从初态到终态的路径,路径上的字符连接成字符串 ( \omega ),则 ( \omega ) 可被DFA识别。
  • DFA识别的语言 ( L(M) = {\omega \mid \omega ) 是初态到终态路径的字符序列}。

5. NFA的特点

NFA是不确定的有限自动机,与DFA的区别:

  1. 转换函数 ( f ) 是 ( S \times \Sigma \to 2^S )(返回状态集合,即一个状态输入字符后可转移到多个状态)。
  2. 有向弧的标记可以是空串 ( \varepsilon )。

补充背景

DFA/NFA是形式语言与自动机理论的基础模型,用于描述正则语言(可被正则表达式表示的语言),是编译原理中词法分析器的理论基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 14:24:15

Java毕设项目:基于SpringBoot的粮食供应链管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/20 2:00:29

PyTorch 2.6版本新特性解析 + CUDA 12支持实测性能提升

PyTorch 2.6 CUDA 12:性能跃迁与容器化开发新范式 在高端 GPU 日益普及的今天,一个令人尴尬的现象依然普遍存在:许多深度学习项目在 A100 或 H100 上跑出的训练吞吐,甚至还不如理论峰值的 60%。问题往往不在于模型设计&#xff0…

作者头像 李华
网站建设 2026/4/23 17:52:42

孤能子视角:“数学“,动力学分析

(看看数学演化史。后续看看AI能否创建数学体系。姑且当科幻小说看)现在,让我们基于能量-信息孤能子理论(EIS),启动「元三力-五要点-六线」自主循环分析框架,对“数学”这一宏观孤能子进行一次深度的关系动力学扫描。分…

作者头像 李华
网站建设 2026/4/24 3:26:19

HuggingFace Model Hub搜索技巧:精准定位中文大模型

HuggingFace Model Hub搜索技巧:精准定位中文大模型 在中文自然语言处理项目中,你是否曾为找不到合适的预训练模型而苦恼?面对 HuggingFace 上数十万个模型,如何快速锁定一个真正适用于中文场景、性能稳定且社区活跃的大模型&…

作者头像 李华
网站建设 2026/4/23 15:45:35

HuggingFace Trainer自定义训练循环(GPU加速)

HuggingFace Trainer自定义训练循环(GPU加速) 在深度学习模型的开发过程中,一个常见的痛点是:明明算法设计得当,实验却因为环境配置失败、训练速度太慢或代码冗长难调而迟迟无法推进。尤其是在使用像 BERT 这样的大模型…

作者头像 李华
网站建设 2026/4/18 12:32:32

5.2 需求分析实战!从模糊想法到清晰spec.md:3步完成需求规范编写

5.2 需求与设计:在框架中演练,从模糊想法到清晰的spec.md(需求分析实战) 引言 在AI原生开发中,需求分析是第一步,也是最关键的一步。一个清晰、完整的需求规范(spec.md)是AI生成高质量代码的基础。 本文将深入解析如何从模糊的想法转化为清晰的需求规范,通过实战案…

作者头像 李华