美文网首页
有限状态自动机(字符串匹配)

有限状态自动机(字符串匹配)

作者: 且乐一杯酒 | 来源:发表于2022-04-28 08:14 被阅读0次

一、有限自动机

有限状态机是一个处理信息的简单机器。通过对文本字符串 T 进行扫描,找出模式 P 的所有出现位置。给它输入一个模式串,会得到一个YES或者NO的结果。
它只对每个文本字符检查一次,并且检查每个文本字符时所需的时间为常数。因此,在模式预处理完成并建立好自动机后进行匹配所需要的时间为 O(n) 。

二、实现

一个有限自动机 M 是一个 5 元组(Q,q, A, ∑,δ)

Q 是状态的有限集合
q∈Q 是一个初始状态
A 包含于 Q 是一个特殊的接受状态集合
∑ 是有限输入字母表
δ 是一个从 Q✖∑ 到 Q 的函数,称为 M 的转移函数

例如,对于0101111001串构建一个判断1的个数是否为偶数个的有限自动机

最后结果为红色区域,表明这个是一个偶数。

又例如,对P="ababaca"构建有限自动机,如以下a图所示

对于每一状态,会根据接受字符的情况来变化。

如b图所示,左边坐标表示状态;右边表示模式串P的匹配情况;上方表示输入情况。
例如第一行:当状态为0时,此时匹配的是P串的字符a。当输入为a时,转入状态1;输入为b,c时,转入状态0.

如c图所示:表示的是文本串T的匹配情况。在文本串之下的是状态的情况,当状态为7时,匹配成功。

伪代码

创建转移函数伪代码

P:模式串(要找到的串)
∑:有限的字母表(对于一个串,我们应该知道其出现了多少种字母,如aabcc的字母表为a、b、c)
k:根据状态q和输入的字符的不同,所设置的该转移到的状态

双层for在做的事:对于每一个状态q,又对于每一个字母表中的字符,k为最可能的最大状态(要么是当前状态q+2,要么是长度m加1,注意这里多了1),然后k自减,直到Pk是Pq合上字符a的后缀时,设置状态函数状态。(参考KMP找最长公共前后缀)

有限自动状态机实现代码

简单来说,就是对于文本串的每一个字符,不断更新当前状态q,当q为模式串长度m时,说明找到串了。

相关文章

  • 有限状态自动机-守卫版

    有限状态自动机概述有限状态自动机-守卫版状态机实战-监听github: https://github.com/we...

  • 有限状态自动机概述

    有限状态自动机概述有限状态自动机-守卫版状态机实战-监听github: https://github.com/we...

  • 状态机实战-监听

    有限状态自动机概述有限状态自动机-守卫版状态机实战-监听github: https://github.com/we...

  • 随笔|AI设计之状态机

    有限状态机 最近尝试写ai,又看了下状态机,其实之前就用过ac自动机,不过是用来处理字符串,实际上ac自动机也是一...

  • 字符串匹配之有限自动机

    字符串匹配的基本解决方案,是在长串中从头至尾遍历匹配模式串,直到找到完全匹配的位置,这样做一个最大的问题就是每次都...

  • Python的Transitions库实现有限状态机(FSM)

    有限状态机(Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态...

  • AC自动机实现屏蔽单词

    多模式自动匹配AC自动机 KMP是多模式匹配算法, 解决的是一个字符串匹配多个模式串的问题, 该字符串往往短于或者...

  • DFA的敏感词过滤实现

    DFA在wiki上面的解释是“确定有限状态自动机或确定有限自动机(deterministic finite aut...

  • 正则表达式

    非确定有限状态机我们可以将KMP算法看做一台由模式字符串构造的能够扫描文本的有限状态自动机,而对于正则表达式我们要...

  • 在Unity中实现有限状态机

    简介 有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是...

网友评论

      本文标题:有限状态自动机(字符串匹配)

      本文链接:https://www.haomeiwen.com/subject/narfsrtx.html