有限自动机
有限自动机分为确定有限自动机(DFA)
和非确定有限自动机(NFA)
两种。
有限自动机(finite automata)
亦称时序机
,有限离散数字系统的抽象数学模型。一个有限自动机M由五元组(X,Y,S,δ,λ)
给定,其中X,Y和S
都是非空有限集,分别称为M的输入集、输出集和状态集
;δ
是笛卡儿积集合S×X
到S
的映射,称为M的下一状态函数;λ
是S×X到Y的单值映射
,称为M的输出函数
。
- 当δ是
单值映射
时,称M为确定有限自动机(DFA)
- 当δ是
多值映射
时,称M为非确定有限自动机(NFA)
有限自动机有三种功能:
- 作为序列
转换器
,将输入序列变换为输出序列; - 作为序列
识别器
,识别输入的序列是否具有某种性质; - 作为序列
产生器
,产生具有所要求性质的序列
https://baike.baidu.com/item/%E6%9C%89%E9%99%90%E8%87%AA%E5%8A%A8%E6%9C%BA/8700995?fr=aladdin (百度百科)
直观来说,有限自动机就相当于,当你站在有红绿灯的十字路口,遇到红灯就需要停止等待,绿灯就可以通行,黄灯亮了等一等
确定有限自动机
确定自动有限机,有一个唯一的初始状态;终止状态可以是一个或者多个。
非确定有限自动机
对于非确定有限自动机来说,他的初始状态可以是多个元素;同时他的终止状态也可以是多个。
与确定自动有限机相比,非确定有限自动机是一个多值函数
问题来源
状态转换图与状态转换矩阵
状态转换图,就是对于每一个状态,将他的所有响应,以及对应的触发事件建立联系。
对于这个问题来说,就是判断一个字符串(科学计数法
)是否可以变成十进制数字。
那么对于最坏的情况下,他的状态为:
也就是8种状态,转化为状态转换图的形式后:
其中,初始状态0和正常结束状态8,所代表的的字符为空格字符;
当我们的结果表示可以转换成一个有效数字时,那么我们的确定自动有限机一定是以数字或者8的空格状态
作为结束的标志。当我们用0表示结束时不能转换为数字,1表示结束时可以转换为数字,那么就有:vector<bool> finals({0, 0, 0, 1, 0, 1, 1, 0, 1});
然后我们需要将抽象的状态转换图,实例化为一个状态转换矩阵,就是一个邻接矩阵,将所有状态之间的关系表示为一个有向图,status[i] [j] = k
表示状态i
经状态j
触发后,会变成状态k
程序
确定有限自动机
class Solution {
public:
vector<vector<int> > statu =
{
{
0, 1, 2, 6, -1, -1},