状态机,也称为有限状态机(Finite State Machine,简称FSM)是描述有限个状态以及在这些状态之间的转移和动作等行为的数学模型。在计算机科学领域里,状态机是一种抽象的计算模型,被广泛应用于软件和硬件系统中。
一个状态机包括一组状态,一组转移规则和一个初始状态。每当系统接收到一个事件时,它会基于当前的状态执行一些事件,然后根据事先定义的状态转移规则改变其状态。状态机可以被用来建模许多自然和人工制品的行为,如电梯、信号灯、网络路由器等。
在状态机中,状态可以被表示为一个离散的值或者一个状态组合。状态机包括以下几个基本元素:
(1)状态:即系统所处的某个状态,可以是离散的单一值或是由多个变量组成的状态组合。
(2)转移:表示由一个状态转移到另一个状态的过程。
(3)事件:触发状态机状态转移的发生,一般是从系统外部产生的输入。
(4)动作:在状态转移过程中,状态机执行的一些动作。
状态机包含两种类型:确定性状态机(Deterministic Finite Automaton,DFA)和非确定性状态机(Nondeterministic Finite Automaton,NFA)。
DFA是一个五元组,包括一个有限状态集、一个有限输入字母表、一个转移函数、一个初始状态和一个终止状态集。对于每个输入符号,DFA有唯一的下一个状态。
NFA与DFA的差异在于可以有多个下一个状态,也就是可以在同一输入符号的情况下,从一个状态出发到达多个状态。
状态机在软件开发中被广泛应用,特别是在编译器中,例如:编译器前端的词法和语法分析阶段,以及编译器后端的代码生成阶段。状态机也经常用于实时嵌入式系统、网络协议处理、游戏开发、UI界面交互、自然语言处理等领域。
平时我们接触较多状态机应用就是各种自动化场景,比如:洗衣机、电饭煲、微波炉等家电设备。还有各种机械设备的自动化控制:自动售货机、交通信号灯、无人驾驶车辆等等。