通俗易懂理解有限状态自动机 FSA 的表示和原理
有限状态自动机(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 的表示和原理相关推荐
- 第十二篇:形式语言理论与有限状态自动机
目录 我们到目前已经介绍了什么? 形式语言理论 为什么要去做这个事情 ? 例子 超越会员问题-- 大纲 常规语言/正则语言 例子重现 正则语言的特性 有限状态接受器 样例 派生形态学 形态学 FSA ...
- 有限状态自动机java实现_有限状态机FSM的几种简单实现
标签: 有限状态机,Akka fsm,squirrel-foundation,java状态模式.责任链模式 1. 有限状态机的概念 有限状态机(英语:finite-state machine,缩写:F ...
- 通俗易懂理解GBDT算法原理-转
GBDT算法深入解析 https://www.zybuluo.com/yxd/note/611571 通俗易懂理解GBDT算法原理 https://blog.csdn.net/qq_36696494/ ...
- 【Codeforces 506E】Mr.Kitayuta’s Gift【BZOJ 4214】黄昏下的礼物 dp转有限状态自动机+矩阵乘法优化...
神题-- 胡乱讲述一下思维过程-- 首先,读懂题. 然后,转化问题为构造一个长度为|T|+n的字符串,使其内含有T这个子序列. 之后,想到一个简单的dp.由于是回文串,我们就增量构造半个回文串,设f( ...
- 用C语言实现有限状态自动机FSM
摘要:状态机模式是一种行为模式,在<设计模式>这本书中对其有详细的描述,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的重 ...
- 深入理解Aho-Corasick自动机算法
0.前言 我总是对那些具有状态转移过程的算法,心怀敬意. 例如:递归.递推.动规.DAT 以及现在要说的 AC 自动机算法. 数学真是优美! ...
- 从零写一个编译器(四):语法分析之构造有限状态自动机
项目的完整代码在 C2j-Compiler 通过上一篇对几个构造自动机的基础数据结构的描述,现在就可以正式来构造有限状态自动机 我们先用一个小一点的语法推导式来描述这个过程 s -> e e - ...
- 有限状态自动机java实现_用java开发编译器之:Thompson构造,将正则表达式转换为有限状态自动机...
阅读博客的朋友可以到我的网易云课堂中,通过视频的方式查看代码的调试和执行过程: 上一节,我们通过代码,实现了一个有限状态自动机,并将其应用于对整形和浮点数的识别.构造有限状态自动机,并驱动它,从而实现 ...
- 表示数值的字符串(有限状态自动机与搜索)
文章目录 题目 思路一 代码一 思路二 代码二 题目 思路一 考察有限状态自动机(参考jyd): 字符类型: 空格 「 」.数字「 0-9 」 .正负号 「 ± 」 .小数点 「 . 」 .幂符号 「 ...
- Graphviz样例之有限状态自动机
Graphviz是一个开源软件,有源码,支持不同平台.linux系统下使用XDot程序显示dot格式的文件. Graphviz显示图形时,可以选择不同的策略进行布局和布线显示图形. Graphviz的 ...
最新文章
- 深度linux12,Linux Deepin 12.06 试用体验
- 位置式PID与增量式PID的介绍和代码实现
- MySQL学习笔记之九:MySQL Replication
- 使用scanf()函数接收带空格的字符串
- C# Socket与实现
- python 如何编写图像标定(标记)(annotation)画框程序?
- jersey客户端_项目学生:带有Jersey的Web服务客户端
- 力扣删除排序数组中的重复项
- OpenSIPS替代VOS3000的方案
- RK3399封装(CPU+GPU)Mali-T860 Codec架构(十六)
- poj 2728 Desert King 01分数规划
- Solaris操作系统介绍
- 二次元高清无水印壁纸
- 华为交换机RRPP环协议
- OCP最新题库收集,052新加的考题及答案整理-19
- VOT(Visual Object Tracking)评价指标综述
- 【图像处理基础】BMP格式图片的解析
- C++基础---面向对象建模方法
- 光引发剂主要用途_可见光引发剂的应用
- 如何让电脑开机自动拨号联网
热门文章
- ubuntu 中下载openssh源码移植到 arm开发,出现you don't exist, go away问题的解决
- jetbrain秘密路径
- 电脑录屏快捷键是什么?电脑录屏是什么键
- Cosy V3.1.3 简洁大气WordPress博客主题自适应个人自媒体网站模板(含积木部分插件)
- 【循序渐进学运维】MySQL运维系列文章汇总
- BitBucket介绍以及基础使用
- 企业正确导入BPM系统要注意什么
- 斗图吗?教你用Python来制作表情包
- outlook配置文件添加服务器,Microsoft Outlook卡在加载配置文件?这里如何解决它
- 【方法论】时间管理矩阵(Time Management Matrix )-给事情排序,列好1234再执行吧!