有限状态自动机

背景提要:星期三的时候,xw交给我一个点灯的任务:大意是一个玩意单击的时候如何如何,长按又如何如何,双击又如何如何,几种状态分别执行不同的操作。

首先我们得明确:我们对于这台微型电脑的一切控制都是通过按按钮来完成的,且同一时间内,按钮只有“被按下”和“不被按下”两个状态。别看咱们是想什么时候按就什么时候按,机器只要 1ms 进行一次按钮的检测就足矣。因此,我们外部的输入完全可以看作是一个长度为毫秒数的 01 串,机器根据这个 01 串来判断何时执行何操作。还有一点是要注意的:在一个特定的时刻,机器并不知道将来的输入而只知道此刻以及之前的输入。换言之:我们的算法必须是在线的。

离线算法(offline algorithms) 在执行算法前需要所有输入数据已知。
在线算法(online algorithms) 在执行算法前不需要所有输入数据已知。
当然有可能讲的不全,不过我在这里给出的是一个充分条件而非充要条件。

这就导致了一种情况:在机器第一次检测到按钮被按下时,我们无法做出论断:我们不知道这是一次双击还是长按还是单击,我们只能静观其变,见机行事。但是按钮被按下时,我们的机器接收到了新的信息,确凿要进入一种和无输入状态不同的新的状态。或许之后由这个新的状态进入更新的状态。等到信息足以确认这是哪一种按键方法时,我们进入最终的状态并作出相应的操作。

仔细观察上述过程之后,我们便得以很容易地抽象出这一过程的几种组成要素,而这也是 有限状态自动机(FSM finite state machine 或 FSA finite state automaton) 的一些概念:

  • 状态(State):一个状态机至少要包含两个状态,一个状态机在一个时刻只处于唯一一个状态,其中有一个状态是起始状态。不同的状态代表不同的意义,机器在不同的状态可以执行不同的操作。
  • 转移(Transition):从一个状态变换到另一个状态,机器根据当前状态和读取的输入变换到另一个状态。

说了这么多,来个题目:

有一台电脑和一个引脚,引脚连接着一个开关,开关被触碰时按下,松开后弹起,电脑可以接收开关的状态。要求实现一个生成器 returnState ,可以检测到一次按键、两次按键、三次按键、长按四种不同的情况。(若短按两次后第三次长按,按照两次操作考虑)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值