1 概述

状态机[1]一般指有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机(英语:finite-state automaton,缩写:FSA),是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。有限状态机是在自动机理论和计算理论中研究的一类自动机。如下图所示,有限状态机归属于自动机理论范畴,从下面的自动机理论的领域分层图可以看出,越往外层,概念越复杂。

状态机中有几个术语:state(状态) 、transition(转移) 、action(动作) 、transition condition(转移条件) 。

  • state(状态) :将一个系统离散化,可以得到很多种状态,当然这些状态是有限的。例如:门禁闸机可以划分为开启状态、关闭状态;电扇可以划分为关、一档、二档、三档等状态。

  • transition(转移) :一个状态接收一个输入执行了某些动作到达了另外一个状态的过程就是一个transition(转移)。定义transition(转移)就是在定义状态机的转移流程。

  • transition condition(转移条件) :也叫做Event(事件),在某一状态下,只有达到了transition condition(转移条件),才会按照状态机的转移流程转移到下一状态,并执行相应的动作。

  • action(动作):在状态机的运转过程中会有很多种动作。如:进入动作(entry action)[在进入状态时进行]、退出动作(exit action)[在退出状态时进行]、转移动作[在进行特定转移时进行]。

如下图,就定义了一个只有opened 和closed两种状态的状态机。当系统处于opened状态,在收到输入“关闭事件”,达到了状态机转移条件,系统就转移到了closed状态,并执行相应的动作,此例有一个进入动作(entry action),进入closed状态,会执行close door动作。

有限状态机在很多不同领域被广泛应用,包括电子工程、语言学、计算机科学、哲学、生物学、数学和逻辑学。在计算机科学中,有限状态机被广泛用于建模硬件电路系统设计软件工程编译器网络协议、和计算与语言的研究。

2 分类

有限状态机可以被分为不同的类型,主要可以被分为:acceptors(接收器)、transducers(转换器) 两大类。

2.1 acceptors(接收器)

acceptors(接收器) 是指产生一个二值的输出,指示接收的输入是否能被接受。acceptors(接收器)的每一种状态都是接受或不接受的。如果一组所有的输入都被接受并且当前的状态是接受状态,那么这一组输入就是可接受的。有限状态机的acceptors(接收器)这一类在正则引擎的实现中用得非常多。

如下图是一种acceptors(接收器) 类型有限状态机,用来识别所输入的字符串是否为nice,其总共被划分为了七种状态,其中只有第七种状态Success被认为是可接受状态。如果所输入的字串不是nice,则会被转移到第六种状态Error

如下给出acceptors(接收器) 的数学形式化定义,acceptors(接收器) 型有限状态机是一个五元组(,S,,,F),其中:

  • 是输入字符集合(有限的非空符号集合);

  • S是有限非空状态集合;

  • 是初始状态,属于中的元素;

  • 是状态转移函数::S  S;

  • F是最终状态集合,是S的子集.

2.2 transducers(转换器)

transducers(转换器) 是根据当前的状态和(或)给定的输入产生输出,输出的同时可能也伴随着状态的转移(不是必须)。在一些事件驱动型应用和计算语言学(computational linguistics)领域应用普遍。transducers(转换器) 型有限状态机可以分为两种子类型,moore machine (摩尔型有限状态机)和mealy machine (米利型有限状态机) ,其中:

  • 若输出只和状态有关而与输入无关,则称为moore状态机

  • 输出不仅和状态有关而且和输入有关系,则称为mealy状态机

2.2.1 moore状态机:

如下所示的状态机为moore状态机,其有q0、q1、q2、q3四个状态,X,Y,Z三个输入,a、b、c三个输出。可以看出其四个状态q0、q1、q2、q3对应的输出分别为b、a、a、c,就是说输出已经和状态绑定好,不管输入为哪一个,均不影响输出。其中q0为初始状态,假设输入为XYZY,可以看出输出为bcac;假设输入为ZXYZ,则输出为baca,可以看出,虽然输出只和状态有关而与输入无关,但改变输入的序列顺序,输出序列也会改变。

2.2.2 mealy状态机:

mealy状态机与输出只依赖于机器当前状态的moore状态机不同,它的输出与当前状态和输入都有关。但是对于每个mealy状态机都有一个等价的moore机。如下所示为一个简单的mealy状态机,它有一个输入和一个输出。在每一个有向边上,标注出了输入(红色)和输出(蓝色)。这个状态机的初始状态为Si,当输入为0,输出0,状态变为S0,接着输入0,输出0,状态还是为S0,在此状态下一直输入0,输出会一直是0,当输入为1时,输出才为1,状态变为S1,在此状态再接着输入1,输出一直还是0,直到遇到输入为0,输出才变为1。此状态机其实实现了一个边缘触发检测器,每次输入从1到0或是从1到0发生跳变时,输出为1否则输出为0。如下所示时序图,当输入为0111001110时,输出为0100101001

3 应用

以日常生活中最常见的电风扇为例,来讨论状态机的应用问题。如下图所示,电风扇有4个按钮,分别是关、弱档、中档和强档,关按钮负责关闭电风扇,也就是停止电风扇的转动;而弱档、中档和强档都可以让电风扇开启,其各档所对应的风扇转动的速度不一样。

可以将按下四个按钮所对应的效果定义四种状态,分别为关机弱风中风强风,另外,外加一个故障状态,总共五种状态。如下为电风扇的状态图转移图,其可能的输入事件为 [按下“关”]、[按下“弱][按下“中”][按下“强”][出现异常]。在状态转移的过程中,肯定有动作的执行,如从关机到弱风的过程中,肯定会执行开启电机的动作;从弱风强风的过程,肯定也会有执行加大电流的动作。整个过程中用不到状态机的输出,所以算是一个转移系统。

回到编程领域,GUI应用程序、Web应用程序等事件驱动型的应用程序,采用状态机的思路来完成程序设计,可以简化设计流程,使程序的可读性、可维护性都得到增加。

4 总结

有限状态机可以分为acceptors(接收器)、transducers(转换器) 两大类。acceptors(接收器) 型有限状态机是一个五元组,transducers(转换器) 型有限状态机是一个六元组。transducers(转换器) 型有限状态机可以分为两种子类型,moore machine(摩尔型有限状态机)和mealy machine(米利型有限状态机)。若输出只和状态有关而与输入无关,则称为moore状态机,若输出不仅和状态有关而且和输入有关系,则称为mealy状态机

参考资料

[1]

维基百科: https://zh.wikipedia.org/zh-hans/%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E6%9C%BA?wprov=sfla1

什么是状态机?一篇文章就够了相关推荐

  1. Android:学习AIDL,这一篇文章就够了(下)

    前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...

  2. 架构师必须搞懂DNS,一篇文章就够了。

    转载自 架构师必须搞懂DNS,一篇文章就够了. 概念 DNS,全称Domain Name System,即域名系统,搞清楚,它不是DNF地下城与勇士. DNS是怎么来的,我们知道要访问一个服务器的资源 ...

  3. 集成Android免费语音合成功能(在线、离线、离在线融合),有这一篇文章就够了(离线)

    原址 集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(在线) 集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(离在线融合)     ...

  4. 全面认识MOS管,一篇文章就够了

    基础知识中 MOS 部分迟迟未整理,实际分享的电路中大部分常用电路都用到了MOS管, 今天势必要来一篇文章,彻底掌握mos管! ...更新:为什么常在MOS管GS并联电阻? ...更新:为什么要在MO ...

  5. 全面认识二极管,一篇文章就够了

    电子设计基础元器件 二极管,小小二极管,大大用途. ... 矜辰所致 目录 前言 一.二极管基础知识 1.1 什么是二极管 1.2 二极管的组成 1.3 二极管的原理 二.二极管特性 2.1 伏安特性 ...

  6. js层级选择框样式_IOS和JS的交互,看这一篇文章就够了

    IOS和JS的交互,看这一篇文章就够了 创作不易,请珍惜,之后会持续更新,不断完善 Demo地址 目录 WKWebView使用.JS的交互 WKWebView使用.JS的交互 演示(本来想贴张GIF作 ...

  7. 关于VR产品的前世今生,看这一篇文章就够了

    关于VR产品的前世今生,看这一篇文章就够了(转) 文/胡勇 即使最富质疑精神最冷静的人也无法漠视现在的 VR/AR 掀起的狂潮,这个从科技圈蔓延到实业界最后席卷大众的想象力的狂欢正以前所未有的态势改变 ...

  8. 五年程序员是如何玩转闲鱼无货源的,只看这一篇文章就够了

    今天的内容方向主要是基础篇-进阶篇 ,优化了一下操作方法,尽量细化,让你看完这篇内容之后从入门到大神. 基础篇: 注册这些基础的之前说过,这次就不说了,这次说下如何养号. 完善个人资料(头像.昵称.简 ...

  9. MySQL优化-一篇文章就够了(转发加收藏吧)

    关注我,一个仍存梦想的屌丝程序员,每天为你分享高质量编程博客. 回复 "代金券"  免费获取腾讯云和阿里云代金券 前言 说起MySQL的查询优化,相信大家收藏了一堆:不能使用SEL ...

  10. 学习 HTML5 Canvas 这一篇文章就够了

    一.canvas 简介 ​<canvas> 是 HTML5 新增的,一个可以使用脚本(通常为 JavaScript) 在其中绘制图像的 HTML 元素.它可以用来制作照片集或者制作简单(也 ...

最新文章

  1. 《程序员书屋》微刊创建,赠书活动进行中!
  2. 中国大学moocpython笔记_用Python玩转数据,中国大学MOOC(慕课)答案公众号搜题
  3. SDM For Face Alignment流程介绍及Matlab代码实现之测试篇
  4. leetcode 1473. 粉刷房子 III(dp)
  5. 通过 Kubeadm联网部署K8S
  6. android.mk if else,gradle - 如何在Android Studio中使用我自己的Android.mk文件 - SO中文参考 - www.soinside.com...
  7. 区块链 以太坊 智能合约 如何销毁 废弃 selfdestruct
  8. Qt程序实现自动重启
  9. Python——类的实例
  10. Native Boot 从一个 VHD 引导系统的相关说明
  11. android 自定义view 实现电影选座功能
  12. 单纯形法中大m法_线性规划 第五讲 单纯形法及进一步讲解(大M法).ppt
  13. Windows中获取用户密码
  14. 鼠标右键转圈圈_【鼠标右键一直在转圈圈】鼠标右键一直在闪_鼠标一直在转圈圈...
  15. 进军互联网该如何选择html模板?
  16. python计算1的平方减2的平方加3的平方减4的平方怎么算_计算1的平方减2的平方加3的平方减4的平方 – 手机爱问...
  17. 在html table 标签的中background和bgcolor两个属性有什么关系?
  18. 双休和单休区别大吗?
  19. 中国会展业大数据中心在贵阳成立
  20. 手持多线激光三维重建

热门文章

  1. 【计算机系统结构】基本互连函数详细图解
  2. asmca - 19c- ACFS
  3. 计算机应用基础试题答案截图,计算机应用基础试题(带答案).docx
  4. 【创作纪念日】我的两周年创作心路历程
  5. php英语过几级,英语一共有几级?等级表是怎么划分的?
  6. 我的创业体会和大公司的做事比较
  7. 【python】鸡兔同笼
  8. deny的用法(refuse和deny的用法区别)
  9. Docker+HomeAssistant+HACS+设备接入教程
  10. 30个北京情调自习室@http://www.douban.com/group/topic/16799387/