确定有限状态自动机(Deterministic Finite Automation)

编译原理笔记3:有限自动机 有限自动机 阅读详情

确定优先状态自动机(Deterministic Finite Automation, DFA)是一种计算模型。它包含一系列状态,这些状态中:

  • 有一个特殊的状态,被称作初始状态
  • 还有一系列状态被称为接受状态,它们组成了一个特殊的集合。其中,一个状态可能既是初始状态,也是接受状态。

起初,这个自动机处于初始状态。随后,它顺序地读取字符串中的每一个字符,并根据当前状态和读入的字符,按照某个事先约定好的转移规则,从当前状态转移到下一个状态;当状态转移完成后,它就读取下一个字符。当字符串全部读取完毕后,如果自动机处于某个接受状态,则判定该字符串被接受;否则,判定该字符串被拒绝。

在这里插入图片描述

如果输入的过程中某一步转移失败了,即不存在对应的转移规则,此时计算将提前中止。在这种情况下我们也判定该字符串被拒绝。

确定有限状态自动机总是能够回答某种形式的**对于给定的输入字符串S,判断其是否满足条件P**的问题。

确定有限状态自动机驱动的编程,可以被看做一种暴力枚举方法的延伸:它穷尽了在任何一种情况下,对应任何的输入,需要做的事情。

自动机在计算机科学领域有着广泛的应用。在算法领域,它与大名鼎鼎的字符串查找算法KMP算法有着密切的关联;在工程领域,它是实现正则表达式的基础。

以剑指 Offer 20. 表示数值的字符串为例:

class Solution {
    public boolean isNumber(String s) {
        Map<State, Map<CharType, State>> transfer = new HashMap<>();
        transfer.put(State.STATE_INITIAL, new HashMap<CharType, State>() {{
                    put(CharType.CHAR_SPACE, State.STATE_INITIAL);
                    put(CharType.CHAR_NUMBER, State.STATE_INTEGER);
                    put(CharType.CHAR_POINT, State.STATE_POINT_WITHOUT_INT);
                    put(CharType.CHAR_SIGN, State.STATE_INT_SIGN);
                }}
        );
        transfer.put(State.STATE_INT_SIGN, new HashMap<CharType, State>() {{
                    put(CharType.CHAR_NUMBER, State.STATE_INTEGER);
                    put(CharType.CHAR_POINT, State.STATE_POINT_WITHOUT_INT);
                }}
        );
        transfer.put(State.STATE_INTEGER, new HashMap<CharType, State>() {{
                    put(CharType.CHAR_NUMBER, State.STATE_INTEGER);
                    put(CharType.CHAR_EXP, State.STATE_EXP);
                    put(CharType.CHAR_POINT, State.STATE_POINT);
                    put(CharType.CHAR_SPACE, State.STATE_END);
                }}
        );
        transfer.put(State.STATE_POINT, new HashMap<CharType, State>() {{
                    put(CharType.CHAR_NUMBER, State.STATE_FRACTION);
                    put(CharType.CHAR_EXP, State.STATE_EXP);
                    put(CharType.CHAR_SPACE, State.STATE_END);
                }}
        );
        transfer.put(State.STATE_POINT_WITHOUT_INT, new HashMap<CharType, State>() {{
                    put(CharType.CHAR_NUMBER, State.STATE_FRACTION);
                }}
        );
        transfer.put(State.STATE_FRACTION, new HashMap<CharType, State>() {{
                    put(CharType.CHAR_NUMBER, State.STATE_FRACTION);
                    put(CharType.CHAR_EXP, State.STATE_EXP);
                    put(CharType.CHAR_SPACE, State.STATE_END);
                }}
        );
        transfer.put(State.STATE_EXP, new HashMap<CharType, State>() {{
                    put(CharType.CHAR_NUMBER, State.STATE_EXP_NUMBER);
                    put(CharType.CHAR_SIGN, State.STATE_EXP_SIGN);
                }}
        );
        transfer.put(State.STATE_EXP_SIGN, new HashMap<CharType, State>() {{
                    put(CharType.CHAR_NUMBER, State.STATE_EXP_NUMBER);
                }}
        );
        transfer.put(State.STATE_EXP_NUMBER, new HashMap<CharType, State>() {{
                    put(CharType.CHAR_NUMBER, State.STATE_EXP_NUMBER);
                    put(CharType.CHAR_SPACE, State.STATE_END);
                }}
        );
        transfer.put(State.STATE_END, new HashMap<CharType, State>() {{
                    put(CharType.CHAR_SPACE, State.STATE_END);
                }}
        );

        int len = s.length();
        State state = State.STATE_INITIAL;

        for (int i = 0; i < len; i++) {
            CharType type = toCharType(s.charAt(i));
            if (!transfer.get(state).containsKey(type)) return false;
            else state = transfer.get(state).get(type);
        }

        return state == State.STATE_INTEGER || state == State.STATE_POINT || state == State.STATE_END || state == State.STATE_FRACTION || state == State.STATE_EXP_NUMBER;
    }

    public CharType toCharType(char c) {
        if (c >= '0' && c <= '9') return CharType.CHAR_NUMBER;
        if (c == 'e' || c == 'E') return CharType.CHAR_EXP;
        if (c == '.') return CharType.CHAR_POINT;
        if (c == '+' || c == '-') return CharType.CHAR_SIGN;
        if (c == ' ') return CharType.CHAR_SPACE;
        return CharType.CHAR_ILLEGAL;
    }

    enum State {
        STATE_INITIAL,
        STATE_INT_SIGN,
        STATE_INTEGER,
        STATE_POINT,
        STATE_POINT_WITHOUT_INT,
        STATE_FRACTION,
        STATE_EXP,
        STATE_EXP_SIGN,
        STATE_EXP_NUMBER,
        STATE_END
    }

    enum CharType {
        CHAR_NUMBER,
        CHAR_EXP,
        CHAR_POINT,
        CHAR_SIGN,
        CHAR_SPACE,
        CHAR_ILLEGAL
    }
}

状态一定要定义好,小数后的整数和小数的前的整数是不一致的,需要使用不同的状态STATE_INTEGER和STATE_FRACTION

参考文献:

  1. 表示数值的字符串
  2. 浅谈DFA确定有限状态自动机
有限自动机(Finite Automaton)详解 NFA的状态转移函数δ:Q × Σ → 2^Q返回的是状态的子集。有限自动机作为计算理论中的重要概念,具有重要的理论意义和实际应用价值,深入研究有限自动机理论对于提高对计算系统和语言形式的理解能力具有重要意义。:对于一个给定的有限自动机,可以通过状态的合并来得到一个状态数更少、结构更简洁的最小化自动机。最小化性质有助于简化自动机的描述和分析。:有限自动机是用于描述和识别正则语言的关键工具,可以通过有限自动机对字符串进行识别和匹配。:在通信协议的建模和分析中,有限自动机可以用于描述和分析协议的状态转移过程。 阅读详情

相关推荐

编译原理学习之:有限状态机(Finate-state Automaton)

文章目录有限状态自动机(Finate-State Automaton)有限状态自动机的定义字符串和语言自动机 vs 语言自动机 accept 一个字符串的意义正则语言定义 Regular正则运算 有限状态自动机(Finate-State Automaton) 状态是有限的 通过不同的触发在状态之间进行转换 有限状态自动机的定义 QQQ 代表有限的状态集合, Σ\SigmaΣ 表示有限的字母表,也就是上图中线上的那些触发条件;通常选用那些数字 1, 2, 3...1,~2,~3..

qq_42902997的博客 3208

有限自动机、正规式

形式:M=(S,Σ,δ,S0,Z)S:有限集,每个元素为一个状态;Σ:有穷字母表,每个元素为一个输入字符;δ:转换函数,单值对照;S0:属于S是唯一初态;Z:一个终极态,可以空缺不写,一般图中双圈或者粗圈为终极态;

m0_55661792的博客 2770

ARM链接器Base Platform模型与动态加载技术解析

链接器作为嵌入式开发工具链的核心组件,负责将编译生成的目标文件整合为可执行程序。在ARM架构中,armlink链接器通过Base Platform模型实现了动态加载功能,该技术基于RELOC重定位机制和PLT(过程链接表)实现代码段的运行时地址调整。这种设计特别适用于需要模块化更新、内存动态分配的物联网设备、车载系统和工业控制器等场景。通过合理配置分散加载文件(scatter file)和优化PLT布局,开发人员可以显著提升动态加载场景下的系统性能。文章深入解析了RELOC属性的使用规范、PLT生成机制等关

weixin_30607659的博客 317

有限状态自动机

有限状态自动机

weixin_61777209的博客 8970

有限状态自动机(Deterministic Finite Automaton, DFA)

确定有限状态自动机(Deterministic Finite Automaton, DFA)是一种用于正则语言识别的模型,广泛应用于文本处理、编译器设计和网络协议等领域。

www_tlj的专栏 3523

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 399

DFA(deterministic finite automaton )有限状态机概念

DFA(deterministic finite automaton )有限状态机,是一个常见的计算机概念,在离散数学和《计算机系统概论》中都有阐述,最近刚好离散数学在学这个,整理一下,供大家参考。DFA是一个含5个元素的元祖(S, q0, T, F, Σ)S:状态的集合q0:初始化状态T:过渡方式?(transition function,此处翻译的不大准确)F:结束状态的集合Σ:全部的字母表以...

qq_30117591的博客 7848

【信息科学与工程学】计算机科学与自动化——第三百零五篇 数据中心 Scale-Up、Scale-Out、Scale-Across 20

GPU 训练中的各种算子融合技巧、梯度压缩与稀疏通信的高级变体、混合专家模型的负载均衡与通信优化、长序列模型的注意力机制优化、模型量化与蒸馏的联合优化、分布式训练中的容错与恢复、以及一些新兴硬件特性的建模(如 HBM3、GDDR7、CXL 3.0 内存语义、PCIe Gen6 PAM4 信令等)。每条仍然包含四个方程式子节。

weixin_49199313的博客 338

有限自动机(finite automation)[转]

参考学习备忘: 转载来自refFinite AutomataSuppose you want to write a program to recognize the word “main” in an input program. Logically, your program will look something like this:cin >> char while (char != “m

医学影像学习笔记 810

微信小程序云开发订单微信支付与小票和标签打印的完整高效流程

本片文章全文12000字,细致讲述从申请账户到小程序注册到打印机的选型最后到实现微信小程序云开发订单支付更新与小票,标签打印完整的高效流程。客户A在我们的点餐平台上点了一杯咖啡,所以客户要在选好后付款,在付款完成后商家的小票打印机和标签打印机打印出本订单的相关信息。

weixin_52312427的博客 3649

用SOEM库搞定汇川SV660N伺服电机:一个Linux C程序员的EtherCAT实战笔记

本文详细介绍了如何在Linux系统下使用SOEM库驱动汇川SV660N伺服电机,包括环境搭建、EtherCAT从站设备识别、PDO映射配置、状态机切换与运动控制等关键步骤。通过实战代码示例和常见问题排查指南,帮助开发者快速掌握工业自动化中的EtherCAT通信技术,实现对伺服电机的精准控制。

weixin_29185199的博客 424

PointWorld: 动作条件的全场景3D点flow 预测(用同一种3D物理空间模态来表示状态和动作)

PointWorld: Scaling 3D World Models for In-The-Wild Robotic Manipulation

u013250861的博客 320

【校园网代理连接问题】已解决,“该设备或资源(Web 代理)未设置为接受端口“7890”上的连接“

我遇到这个问题很多次。每次都是vpn的问题,不止通俗意义上的梯子(clash之类的),还包括校园网vpn。点击“ 拨号和虚拟专用网络设置”中的“设置”, 关闭代理服务器。在打开vpn后或者关闭vpn后无法浏览网页,网页诊断显示“关闭“手动设置代理”中的“使用代理服务器”,关闭对应的本地代理即可。

聆雨。 1万+

确定有限状态自动机(维基百科)

确定有限状态自动机[编辑] 维基百科,自由的百科全书 在计算理论中,确定有限状态自动机或确定有限自动机(英语:deterministic finite automaton, DFA)是一个能实现状态转移的自动机。对于一个给定的属于该自动机的状态和一个属于该自动机字母表的字符,它都能根据事先给定的转移函数转移到下一个状态(这个状态可以是先前那个状态)。

Domacles 6805

[语义分割]SPP、空洞卷积与ASPP总结

ASPP全称:Atrous Spatial Pyramid Pooling,中文可以理解为空洞空间卷积池化金字塔或者多孔空间金字塔池化。在这其中,要理解两个概念:一个是SPP,池化金字塔结构或者叫空间金字塔池化层,都是一个东西;另一个是Atrous,空洞卷积,两个加在一起就是ASPP。 首先说一下SPP:Spatial Pyramid Pooling。这个结构出自于论文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Re

lipengfei0427的博客 2万+

机器视觉检测到底怎么做,经验分享

笔者做机器视觉检测已经有五六年了,也算是对机器视觉的检测技术有了一定的掌握。总的来说,基于机器视觉的检测技术主要包含三个部分:视觉采集模块、后台分析模块和动作决策模块。这几个分类,跟教科书上的有较大差异,很多同学觉得我在杜撰。笔者也不作反驳,因为这是笔者这些年工作经验的总结,自然区别于教科书。下面我们分开来讲这几个模块,同时会把笔者之前的论文做个推荐总结。 所有文章均可在博主的主页中找到,若无法找到,可以用搜索工具。博主的主页: https://blog.youkuaiyun.com/Aoulun 第..

Aoulun的博客 8676

2.3 有限自动机

有限自动机是一种能够从给定输入串中识别出模式(或者说“语言”)的模型。它由一组状态、一个输入符号集合、一个转换函数、一个起始状态以及一个或多个接受状态组成。有限自动机分为两种类型:确定性有限自动机(DFA)和非确定性有限自动机(NFA)。DFA是一种特殊的有限自动机,其中每个状态对于给定的输入符号都最多只有一个可能的转换。这意味着,给定任何输入字符串,DFA都有一个确定的路径通过状态转换。无ε转换:DFA中不存在ε转换,即所有状态转换都必须消耗输入字符串中的字符。唯一性转换。

tang7mj的博客 3100

如何在 SAP BTP 上使用 Integration Suite 消费 S/4HANA Cloud API

SAP Integration Suite是一个集成平台即服务(iPaaS),允许开发人员顺利地将内部部署和基于云的应用程序和流程与SAP管理的工具和预构建内容进行集成。登录 SAP Business Technology Platform Cockpit,进入 integration suite:再点击 API management 进入 API Portal:或者直接从收藏夹里打开链接:https://304a49cetrial.integrationsuitetrial-apiportal.cfapp

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1697

有限自动机DFA 、 无限自动机NFA

软件设计师

douxingpeng1的博客 1万+

【面试系列】数据工程师高频面试题及详细解答

本文针对数据工程师岗位,提供了详尽的面试题库和解答,分为初级、中级和高级三个层次。初级面试题主要涉及基本的数据处理和ETL工具的使用,如SQL查询、数据清洗和基本的数据建模。中级面试题重点考察数据管道设计、数据库优化和大数据平台的应用。高级面试题则深入探讨高级数据处理技术、分布式系统架构和数据湖的实现。通过这些问题和解答,候选人可以全面了解数据工程师岗位所需的技能,帮助其更好地准备面试。常考知识点总结部分则系统归纳了数据工程师岗位的关键技能领域。

在路上的专栏 2375

MIKE 21 教程 1.5 基于卫星影像绘制河道边界

上一节讲解了如何输入高程数据与绘制网格本节讲解如何根据卫星影像绘制河道边界。在实际项目中,经常遇到河道图纸缺少的情况,此时可以根据卫星影像进行勾勒绘制。常用的地理信息软件均可完成此功能,这里使用大家较为熟悉的ArcGis进行教学(本文默认大家有基础ArcGis操作知识,如有不懂可留言)。

Hello Word 3282

【编译原理】有限状态机(FSM)和有限自动机(FA)

FSM是一个5元组 M = (S, Σ, f, s0, Z)S是有限状态集Σ是一个有限字母表,其中w=w1w1…wn是一个输入字符串,且wi是∑的成员f是一个单值转换函数,定义了S x Σ -> Ss0∈S是初始状态0Z∈S是最终状态L0 L1 L2 L3 从左到右,最右边语法限制最多if α → β举例:如果语法是规则的,那么它必须是上下文无关参考来源:Dr. Amit K. Chopra。

qq_46130027的博客 2317

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

确定有限状态自动机(deterministic finite automaton)DFA

google找了一点资料,做个记录。   维基百科定义:在计算理论中,确定有限状态自动机或确定有限自动机(英语:deterministic finite automaton, DFA)是一个能实现状态转移的自动机。对于一个给定的属于该自动机的状态和一个属于该自动机字母表{\displaystyle \Sigma }Σ的字符,它都能根据事先给定的转移函数转移到下一个状态(这个状态可以是先前那个状...

xiaqi4145 4401

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

有限自动机(Finite Automaton)是一种理论计算模型,它是一种抽象的计算模型,用于描述具有有限个状态的系统行为

然而,非确定型有限自动机也可以被转换为确定型有限自动机,通过使用“epsilon转换”,这是一种特殊的转换规则,允许自动机在没有输入符号的情况下从一个状态转换到另一个状态。有限自动机可以进一步分为不同类型的自动机,如确定性有限自动机(DFA)和非确定性有限自动机(NFA)。确定性有限自动机是一种每次遇到相同的输入符号时都会以相同的方式转移的自动机,而非确定性有限自动机则可以在遇到相同的输入符号时以多种方式转移。例如,在电路设计中,有限自动机可以用来描述一个电路的行为,包括输入和输出之间的关系。

博客域名:borter.blog.youkuaiyun.com 886

自动机,状态机,有限自动机,有限状态机,有限状态自动机,非确定下有限状态自动,确定性有限状态自动机的区别于联系

这几个概念晕了几天了,搞明白了就来备注一下 FSM(Finite State Machine) FAM(Finite Automata Machine) DFA(Determinate Finite Automata) NFA(Non-Determinate Finite Automat) 自动机:自动机是有限状态机(FSM)的数学模型。 状态机:我们现在所说的

Monet Zheng的查漏补缺 2万+
上一篇: 树状数组(Binary Index Tree)
下一篇: 同余及其性质(Congruence)
小菜2小白
博客等级 码龄4年 4粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值