有限状态自动机(FSA),通常的作用就是用一种更加直观的方式来表示正则化表达式。

目录

  • FSA的表达形式
    • (一)用有向图表示FSA
    • (二)用状态转移表表示FSA
  • FSA识别字符串的原理
    • (一)用有向图表示的FSA
    • (二)用状态转移表表示的FSA

FSA的表达形式

(一)用有向图表示FSA

用一个例子来解释FSA(以下简称自动机)的有向图表达形式。我们把羊的语言(叫声)抽象为:baaa…! 用正则化表达式可以表示为 / baa+!/,那么如何用FSA来表示羊的语言呢,下面看一张图。

上图就是用FSA表示的羊的语言,该FSA是用有向图来表示的,有向图由两个集合组成,节点的集合和连接两节点弧线的集合,节点表示状态,弧线表示进入下一个状态的条件。图中,q0表示初始状态,q4表示终极状态(或接收状态)

(二)用状态转移表表示FSA


我们知道有向图可以用矩阵来表示,状态转移表其实就是一个矩阵,同样以识别羊的语言为例子,如上图即为用状态转移表表示的FSA,同样有4个状态,0为初始状态,4为终极状态。

FSA识别字符串的原理

(一)用有向图表示的FSA

用有向图表示FSA时,其识别字符串的工作原理如下:把待识别的字符串放在一个“带子”(tape)上,该带子有若干单元格,每个单元格可以放一个字符,如下图:

FAS从初始状态q0开始,依次识别带子上的字符,若识别到的字符与此时状态到下个状态的弧上的字符相同,则进入下一个状态,相应的带子上的待识别字符也向后移动一个,这样依次识别,当到达终极状态(接收状态)时,识别完成。

下面分析一下不能够成功完成识别的情况。不能成功完成识别分为三种情况:

(1)在带子上识别到的字符与对应的弧上的字符不匹配,则不能进入下一个状态,识别失败。

(2)带子上的字符已经读完,依然没有读到整个需要的字符串。

(3)自动机在某一种非终极状态停住了。

出现这三种情况都称为FSA拒绝(reject)接收输入字符串,即没能成功识别。

(二)用状态转移表表示的FSA

依然是上面的例子,用状态转移表表示的FSA如下:

状态转移表中表示了识别的各种状态,它的工作过程简单来说就是从初始状态转移到终极状态。如图,从初始状态0开始,如果遇到b,则进入下一个状态1,如果遇到a和!则表示转移失败,定义4为终极状态(用4后面加一个“:”表示),当转移到状态4时,识别成功。

以上只是对用状态转移表表示的FSA的基本原理的理解,我们知道之所以会想到用矩阵来表示有向图,很大程度上是为了方便用代码来表示相关的算法,同样的,用状态转移表也是为了方便用代码来表示FSA的工作过程,这里就不展开细述了,下一篇文章再来细讲一下用代码表示FSA识别字符串的算法,完成之后会把连接附在文末。

python实现简单的FSA:
链接: link.

通俗易懂理解有限状态自动机 FSA 的表示和原理相关推荐

  1. 第十二篇:形式语言理论与有限状态自动机

    目录 我们到目前已经介绍了什么? 形式语言理论 为什么要去做这个事情 ? 例子 超越会员问题-- 大纲 常规语言/正则语言 例子重现 正则语言的特性 有限状态接受器 样例 派生形态学 形态学 FSA ...

  2. 有限状态自动机java实现_有限状态机FSM的几种简单实现

    标签: 有限状态机,Akka fsm,squirrel-foundation,java状态模式.责任链模式 1. 有限状态机的概念 有限状态机(英语:finite-state machine,缩写:F ...

  3. 通俗易懂理解GBDT算法原理-转

    GBDT算法深入解析 https://www.zybuluo.com/yxd/note/611571 通俗易懂理解GBDT算法原理 https://blog.csdn.net/qq_36696494/ ...

  4. 【Codeforces 506E】Mr.Kitayuta’s Gift【BZOJ 4214】黄昏下的礼物 dp转有限状态自动机+矩阵乘法优化...

    神题-- 胡乱讲述一下思维过程-- 首先,读懂题. 然后,转化问题为构造一个长度为|T|+n的字符串,使其内含有T这个子序列. 之后,想到一个简单的dp.由于是回文串,我们就增量构造半个回文串,设f( ...

  5. 用C语言实现有限状态自动机FSM

    摘要:状态机模式是一种行为模式,在<设计模式>这本书中对其有详细的描述,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的重 ...

  6. 深入理解Aho-Corasick自动机算法

    0.前言   我总是对那些具有状态转移过程的算法,心怀敬意.   例如:递归.递推.动规.DAT 以及现在要说的 AC 自动机算法.   数学真是优美!                         ...

  7. 从零写一个编译器(四):语法分析之构造有限状态自动机

    项目的完整代码在 C2j-Compiler 通过上一篇对几个构造自动机的基础数据结构的描述,现在就可以正式来构造有限状态自动机 我们先用一个小一点的语法推导式来描述这个过程 s -> e e - ...

  8. 有限状态自动机java实现_用java开发编译器之:Thompson构造,将正则表达式转换为有限状态自动机...

    阅读博客的朋友可以到我的网易云课堂中,通过视频的方式查看代码的调试和执行过程: 上一节,我们通过代码,实现了一个有限状态自动机,并将其应用于对整形和浮点数的识别.构造有限状态自动机,并驱动它,从而实现 ...

  9. 表示数值的字符串(有限状态自动机与搜索)

    文章目录 题目 思路一 代码一 思路二 代码二 题目 思路一 考察有限状态自动机(参考jyd): 字符类型: 空格 「 」.数字「 0-9 」 .正负号 「 ± 」 .小数点 「 . 」 .幂符号 「 ...

  10. Graphviz样例之有限状态自动机

    Graphviz是一个开源软件,有源码,支持不同平台.linux系统下使用XDot程序显示dot格式的文件. Graphviz显示图形时,可以选择不同的策略进行布局和布线显示图形. Graphviz的 ...

最新文章

  1. 深度linux12,Linux Deepin 12.06 试用体验
  2. 位置式PID与增量式PID的介绍和代码实现
  3. MySQL学习笔记之九:MySQL Replication
  4. 使用scanf()函数接收带空格的字符串
  5. C# Socket与实现
  6. python 如何编写图像标定(标记)(annotation)画框程序?
  7. jersey客户端_项目学生:带有Jersey的Web服务客户端
  8. 力扣删除排序数组中的重复项
  9. OpenSIPS替代VOS3000的方案
  10. RK3399封装(CPU+GPU)Mali-T860 Codec架构(十六)
  11. poj 2728 Desert King 01分数规划
  12. Solaris操作系统介绍
  13. 二次元高清无水印壁纸
  14. 华为交换机RRPP环协议
  15. OCP最新题库收集,052新加的考题及答案整理-19
  16. VOT(Visual Object Tracking)评价指标综述
  17. 【图像处理基础】BMP格式图片的解析
  18. C++基础---面向对象建模方法
  19. 光引发剂主要用途_可见光引发剂的应用
  20. 如何让电脑开机自动拨号联网

热门文章

  1. ubuntu 中下载openssh源码移植到 arm开发,出现you don't exist, go away问题的解决
  2. jetbrain秘密路径
  3. 电脑录屏快捷键是什么?电脑录屏是什么键
  4. Cosy V3.1.3 简洁大气WordPress博客主题自适应个人自媒体网站模板(含积木部分插件)
  5. 【循序渐进学运维】MySQL运维系列文章汇总
  6. BitBucket介绍以及基础使用
  7. 企业正确导入BPM系统要注意什么
  8. 斗图吗?教你用Python来制作表情包
  9. outlook配置文件添加服务器,Microsoft Outlook卡在加载配置文件?这里如何解决它
  10. 【方法论】时间管理矩阵(Time Management Matrix )-给事情排序,列好1234再执行吧!