简聊DFA(确定性有限状态自动机)
状态机理论最初的发展在数字电路设计领域。而在软件设计领域,状态机设计的理论俨然已经自成一体。
状态机是软件编程中的一个重要概念,比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态,再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些,但这不影响我们对状态机的认识。进一步看,击键动作本身也可以看做一个状态机。一个细小的击键动作包含了:释放、抖动、闭合、抖动和重新释放等状态。
1. 状态机的历史
纯属个人观点,如有错误请指正
状态机衍生于离散数学中的图论,然后针对于特定场景下提出的延伸性概念。
图论最开始研究的是现实中的事物之间的关系。
比如图论里面经典的“七桥问题”,是有具体的事物:4个岛屿,7座桥梁。
随着科技的进步,发现一些新的事情无法用“事物”来表述。
而计算机程序的状态机则更加抽象了“事物”的概念,“状态”即“事物”。“状态”可以对应独立事物的状态,如人的状态:开心,悲伤,严肃,正常等;也可以对应多种事物间的关系,如我爱你,你爱他,他爱我。
我们也把多种事物的状态抽象成一个独立的整体,比如“三角恋”,可以当做一个独立的整体来研究。
其实很多时候我们延伸了状态的概念,比如数据,或者关系
2.概念
无限状态机属于理论上的一个模型,比如人脑,对于目前人类来说就属于无限状态机。
现在的人工智能AI,理论上是要实现的就应该是无限状态机。可以在任何情况下,做出合理的抉择。
而目前人工智能无法“打败”人类,也是因为状态是可以被枚举的。
不可预测是无限状态机么?
我们主要来研究有限状态机:状态可以被枚举的状态机。先来统一几个概念:
- 输入:有可能触发状态改变的 数据、事件等;每个节点都必须至少有一个输入;
- 转换:从一种状态转移到另一种状态之间的过程;“状态”被转换以后,可能是一种新态,也可能不变;
- 状态:从某种维度建立的,描述当前系统、事物等的数据;
- 接受状态(终态):被用户接受的状态;
- 非接受状态:中间状态,不被用户接受,但现实存在的状态;
我们要说明的是DFA,即确定性有穷状态自动机:在输入一个状态时,只得到一个固定的状态。
3. 一个简单的DFA
人抽烟生病:
-
正常状态A
-
难受状态B
-
住院状态C
-
h:普通抽一支,没事儿,还是A;
-
i: 抽多了,开始不舒服B;
-
j:检查出来生病了,肺部损伤住院C;
-
k:赶紧拿掉药,猛吃;
-
l:开始好转,回到默认状态;
此时回到了A(正常)状态;
下图的状态演示图里面,表明这个烟民没有戒烟成功,还是在向C状态转移。
其中:
输入: h ,i ,j,k,l
转换: 箭头连线
状态:A,B,C
非接受态:A,B
接受态:C
我们用数学符号表示:
- M = (Q,Σ,