状态机(一):抽象的控制流程模型
来源:互联网 发布:java中的final关键字 编辑:程序博客网 时间:2024/06/09 22:02
状态机是一种抽象的逻辑模型。我们先从一个问题入手谈谈状态机的抽象过程。
例:串行输入一个二进制bit序列,先输入的为高位,实时检测其表示的二进制数是否能被三整除。
我们可以用一个表格来分析一下这个问题:
现在状态
输入1后的下一个状态
输入0后的下一个状态
状态s0
数据a,能被3整除
2*a+1,被3除余1
2*a,被3整除
状态s1
数据a,被3除余1
2*a+1,被3整除
2*a,被3除余2
状态s2
数据a,被3除余2
2*a+1,被3除余2
2*a,被3除余1
进一步,我们把它写成简介的状态转换表:
input 1input 0S0S1S0S1S0S2S2S2S1对应的,绘制状态转换图:
有了这样一个状态转换图,该问题也就迎刃而解。
状态机抽象建模,有三个要素需要分析,一是状态的定义,二是状态跳转条件,三是输入与输出。
状态的定义是最为关键的,状态是控制流程中的节点,问题的复杂度决定了状态的多少。状态间具有互斥性,既同一时刻,状态机仅可能具有一个状态。
状态跳转往往由输入决定,这反映状态机响应外部事件。当然,也会有自动跳转的不稳定太,描述时序上的自动控制。
根据输出的决定因素,状态机可分为两类,
第一类,若输出只和状态有关而与输入无关,则称为Moore状态机
第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机
上例中,输出指示序列数据是否能被3整除,仅由状态决定,因此是Moore机。
从上例中,我们可以看出,使用状态机模型抽象问题,首先需要用状态的语言描述问题,定义出有限个不同的状态,这是抽象解决问题最关键的一步;其次,需要分析出状态的转换关系,既状态跳转条件;最后,将输出与状态及输入关联起来。
在数字逻辑中,状态机模型应用的最为广泛,从简单的跑马灯,到复杂的CPU,核心部分都是状态机电路。数字电路实现状态机由组合电路和时序电路两部分构成。一般来讲,时序电路里的寄存器结构锁存状态信息,组合电路实现状态转换的逻辑判定。
- 状态机(一):抽象的控制流程模型
- 基于模型的PLC程序设计一 状态机介绍
- 状态机的模型化思路
- 基于状态机的简单控制
- 状态机(一)
- PHP的流程控制学习要点,流程控制就是人类思维的抽象
- 第三章 程序的流程控制(一)
- 对呼叫状态机和模型状态机的思索
- erlang的函数与流程控制【一】
- MapReduce源码分析之作业Job状态机解析(一)简介与正常流程浅析
- 运算符及控制流程(一)
- 四、java流程控制(一)
- clojure-基本语法-流程控制(一)
- 虚幻4蓝图:流程控制(一)
- PHP之流程控制(一)
- 汇编语言入门五:流程控制(一)
- darwin之RTSPSession Run的状态机流程
- 基于状态机模型的编程方法
- Java中wait和sleep方法的区别
- 入场动画
- 文章标题
- ExecutorService的正确关闭方法
- Django项目-编写Django应用
- 状态机(一):抽象的控制流程模型
- netty源码分析之-ByteBuf详解以及与JDK中ByteBuffer差异(11)
- 「Deep Learning」理解Pytorch中的「torchvision.transforms」
- 性能测试之常见系统应用分层架构
- JS中some(),every(),forEach(),map(),filter()区别
- Scala基础学习之tuple(元组),Array(数组),Map(映射)
- 空间统计学习笔记——DBSCAN 聚类分析
- Mysql : Mysql引擎
- zoj3317——Murder in Restaurant