C语言状态机
状态机,使用C编程
什么是状态机
有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机(英语:finite-state automaton,缩写:FSA),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。
上面是wikipedia上面的解释。
状态机的数学定义:
接受状态又称之为最终状态,状态图中通常将其标示为双圆圈。
字母表:使得状态机状态变化的行为,就是状态图中的箭头
使用一个自动门来解释上面的数学定义:
一个自动门有两种状态——打开、关闭。这就是他的状态集(Q)
当一个人进来、出去、在一定时间内没有没有人进出就会自动关上(超时)。这就是他的字母表。可以认为所谓的字母表就是可以改变状态的事件
自动门从关闭到打开,就是他的状态转移函数
门在刚刚安装好的时候,我们认为其初始状态时关闭的。这就是他的初始状态。
只要自动门没有坏,其就会一直运行,所以其没有接受状态,接受状态集为空集
状态机的分类
给定一个状态,和一个输入,你总能确定地转换到下一个状态。这就是确定有限状态机(DFA)
反之,如果无法正确的转换到下一个状态就是非确定有线状态机(NFA)
状态机的工作原理
状态机的应用
使用状态机来计算文件中的单词的数量。
状态集:
- 指向字符(单词内)
- 指向非字符(单词外)
字母表:
每个字符就是该模型下的字母表
状态转换函数:
从单词内转换到单词外函数
初始状态:
- 指向的是一个字符
- 指向的不是一个字符
接受状态:(接受状态又称之为结束状态)
指向文本的末尾
使用图形表达:
代码完成
1 |
|
扩展阅读
https://juejin.cn/post/6844903827540279309
https://cloud.tencent.com/developer/article/1046244
https://zhuanlan.zhihu.com/p/572636669
参考资料
《系统程序员成长计划》第10章
C语言状态机
https://ysc2.github.io/ysc2.github.io/2023/11/12/C语言状态机/