有限状态机FSM详解及其实现
2018-08-20 10:23
316 查看
有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向加权边表示输入字符时状态的变化。如果图中不存在与当前状态与输入字符对应的有向边,则FSM将进入“消亡状态(Doom State)”,此后FSM将一直保持“消亡状态”。状态转换图中还有两个特殊状态:状态1称为“起始状态”,表示FSM的初始状态。状态6称为“结束状态”,表示成功识别了所输入的字符序列。
在启动一个FSM时,首先必须将FSM置于“起始状态”,然后输入一系列字符,最终,FSM会到达“结束状态”或者“消亡状态”。
View Code
- 通过Passive Data实现映射的FSM:
在如上的switch分支中,其使用类型大致相同,因此,我们可以考虑将相似的信息保存到一张表中,这样就可以在程序中避免很多函数调用。在每个状态中都使用一张转换表来表示映射关系,转换表的索引使用输入字符来表示。此外,由于通过转换表就可以描述不同状态之间的变化,那么就没有必要将每种状态定义为一个类了,即不需要多余的继承和虚函数了,仅使用一个State即可。
View Code
当然也可以将上述程序中的转换表不放在主程序中,而是由一个派生自Fsm的子类SpecificFsm提供,在SpecificFsm中设置具体的转换表,然后通过SpecificFsm的初始化列表传到基类Fsm中,这样在主程序中就可以使用SpecificFsm来进行操作了。
相关文章推荐
- 有限状态机FSM详解及其实现
- 有限状态机FSM详解及其实现
- C语言实现有限状态机FSM
- 设计模式_实现简单的有限状态机(FSM)
- 【循序渐进学图形学之】Bresenham画线算法详解及其OpenGL编程实现
- Canny边缘检测算法原理及其VC实现详解(一)
- 一个应用实例详解卡尔曼滤波及其算法实现
- Canny边缘检测算法原理及其VC实现详解(二)
- 单链表的实现和相关面试题及其详解(C语言)
- 实例详解卡尔曼滤波及其算法实现
- Canny边缘检测算法原理及其VC实现详解(二)
- [深入浅出Cocoa]详解键值观察(KVO)及其实现机理
- 有限状态机FSM的设计与实现
- [深入浅出Cocoa]详解键值观察(KVO)及其实现机理
- Canny边缘检测算法原理及其VC实现详解(二)
- 一个应用实例详解卡尔曼滤波及其算法实现
- LeNet-5模型详解及其TensorFlow代码实现
- OpenCV: Canny边缘检测算法原理及其VC实现详解
- Canny边缘检测算法原理及其VC实现详解