利用有限自动机进行字符串匹配

本文介绍了有限自动机的概念及其在字符串匹配中的作用。通过解析有限自动机的定义,包括状态、初始状态、接受状态、输入字母表和转移函数,阐述了如何构建有限自动机来优化匹配过程。相比于朴素字符串匹配算法,有限自动机可以记录匹配信息,提高匹配效率,其时间复杂度为O(n),但在预处理阶段需要O(m∑)的时间,总体效率得到提升。
摘要由CSDN通过智能技术生成

Q:Finite Automaton?,我根本就没有听说过这种数据结构,毫不关心无压力.jpg

A:这个还是有点儿用处的,等一下我会讲的,你就当涨知识了吧。

Q:呼噜噜~~~~~~

A:睡好。。。

在讲解Finite Automaton之前我们先介绍一下朴素字符串匹配算法

朴素字符串匹配算法就是通过一个循环找到所有的有效偏移,对于n-m+1个可能的s,我们需要检测P[1...m]==T[s+1,s+m]。

朴素字符串伪代码如下:

Naive_String_Matcher(T,P)
   n=T.length
   m=P.length
   for s = 0 to n-m
        if p[1...m] == T[s+1,s+m]
           print("Pattern occurs with shift" s

朴素字符串有两层循环,第一层 0到n-m,第二层 1到m,故总的时间复杂度为O((n-m+1)*m)。

想一下,我们在朴素字符串匹配算法中,一旦匹配失败,就向右偏移一个单位,然后开始重新匹配,那么之前匹配上的那些字串又得重新匹配,那么有没有什么办法可以记录之前匹配的信息,下面有请 Finite Automaton 

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

Q是状态的有限集合

q∈Q是一个初始状态

A包含于Q是一个特殊的接受状态集合

∑是有限输入字母表

δ是一个从Q✖∑到Q的函数,称为M的转移函数

我们用下图来详解有限自动机

图a为有限自动机的状态图。

图b是一个状态函数表,它表示了在有限自动机图中的所有状态。

图c是文本T在自动机上面的操作。

有限自动机就是利用模式串P与自己匹配来创建的自动机,相对应的匹配算法可以理解为通过文本串T中的字符来走如图a所示的地

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值