[leetcode],基于确定有限自动机的有效数字

本文介绍了有限自动机的概念,包括确定有限自动机(DFA)和非确定有限自动机(NFA),并以LeetCode中的有效数字问题为例,探讨了它们在序列识别和转换中的应用。通过状态转换图和状态转换矩阵,解释了如何判断一个字符串是否能转换为十进制数字。最后,提供了DFA的实现思路。
摘要由CSDN通过智能技术生成

有限自动机

有限自动机分为确定有限自动机(DFA)非确定有限自动机(NFA)两种。

有限自动机(finite automata)亦称时序机,有限离散数字系统的抽象数学模型。一个有限自动机M由五元组(X,Y,S,δ,λ)给定,其中X,Y和S都是非空有限集,分别称为M的输入集、输出集和状态集δ是笛卡儿积集合S×XS的映射,称为M的下一状态函数;λ是S×X到Y的单值映射,称为M的输出函数

  • 当δ是单值映射时,称M为确定有限自动机(DFA)
  • 当δ是多值映射时,称M为非确定有限自动机(NFA)

有限自动机有三种功能:

  1. 作为序列转换器,将输入序列变换为输出序列;
  2. 作为序列识别器,识别输入的序列是否具有某种性质;
  3. 作为序列产生器,产生具有所要求性质的序列

https://baike.baidu.com/item/%E6%9C%89%E9%99%90%E8%87%AA%E5%8A%A8%E6%9C%BA/8700995?fr=aladdin (百度百科)

直观来说,有限自动机就相当于,当你站在有红绿灯的十字路口,遇到红灯就需要停止等待,绿灯就可以通行,黄灯亮了等一等

确定有限自动机

在这里插入图片描述
确定自动有限机,有一个唯一的初始状态;终止状态可以是一个或者多个。
在这里插入图片描述

非确定有限自动机

在这里插入图片描述
对于非确定有限自动机来说,他的初始状态可以是多个元素;同时他的终止状态也可以是多个。

与确定自动有限机相比,非确定有限自动机是一个多值函数

在这里插入图片描述

问题来源

https://leetcode-cn.com/problems/valid-number/solution/

在这里插入图片描述

状态转换图与状态转换矩阵

状态转换图,就是对于每一个状态,将他的所有响应,以及对应的触发事件建立联系。

对于这个问题来说,就是判断一个字符串(科学计数法)是否可以变成十进制数字。

那么对于最坏的情况下,他的状态为:
在这里插入图片描述
也就是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},
           
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值