有限状态机
有限状态机,Finite State Machine,简称 FSM。
FSM 解决一个输入序列,经过 FSM,最终停留在什么状态这样一个问题。
一个 FSM 首先有一系列的状态(state)。根据输入的不同,FSM 从一个状态切换到另一个状态。在这些状态中,有一些状态是特殊的状态 —— 接受状态(accept state)。如果输入处理完毕,FSM 停留在接受状态,那么 FSM 处理成功,否则失败。
FSM 对于输入,只能一个单元一个单元处理,既不能获取后面的输入,也不能回溯之前的输入。你能依赖的,只有当前所处的状态,以及当前的输入。
确定有限自动机
确定有限自动机,Deterministic Finite Automaton,简称DFA,即给出一个输入,总能转移到确定的下一个状态。
非确定有限自动机
非确定有限自动机,Nondeterministic Finite Automaton,简称NFA。
即给定一个状态和一个输入,我们无法确定地转换到下一个状态。
对于非确定有限自动机,我们有几种策略
-
决策树
-
把NFA转换为DFA
一个例子
有限自动机用于处理正则匹配。
我们用确定有限自动机分析这道题目。
首先,我们的自动机处于未接受字符的初始状态,之后,自动机开始顺序接受一个输入字符,然后按照既定的规则转移到下一个状态。同时,如果该自动机接受字符后未找到对应的接受规则,则匹配失败。
当所有字符输入完毕后,如果自动机处于接收状态,则最终字符串符合规则,被接受,否则,字符串不符合规则,即被拒绝。
确定所有可能的状态
第一步,列出所有可能出现的状态
- 字符串首空格
- 尾空格
- 符号位
- 小数点
- 符号e(E)
- 整数部分
- 小数部分
- 指数的左部
- 指数的右部
确定初始状态与接受状态
初始状态为状态1
终止状态,由题意知,合法字符串结尾只可能是数字或者存在整数部分的小数点,或者一串空格
定义转移规则
定义拒绝状态
如果对于当前状态与当前输入找不到转移状态,则拒绝输入,返回false。
代码
之后,就是将规则用代码实现出来