从KMP到FSA有限状态自动机字符串匹配

本文介绍了KMP算法与FSA有限状态自动机在字符串匹配中的关系。FSA通常用于更复杂的任务,而KMP是其简化版,用于高效字符串匹配。文章详细阐述了如何从KMP的next数组构建FSA状态转移图,并解释了next数组的含义和构建原理。
摘要由CSDN通过智能技术生成

前言

在数据结构课上,老师先讲了Finite State Automata,说理解了FSA然后理解KMP就不难了,然而FSA一直没能讲明白怎么构造FSA来实现字符串匹配。而今天看了Analysis Of Algorithm之后才发现虽然KMP算法确实是相当于简化的FSA,但是用FSA来查找子串简直是杀鸡用牛刀(比如说FSA可以用来判断母串里是不是有偶数个a并且有奇数个b,etc…但是KMP就不行了)。
如果不明白FSA,推荐看这个博客以及上面提到的Analysis Of Algorithm.
如果不明白KMP,推荐看这个博客,写得非常好。

基本的FSA概念

在说KMP与FSA的关系之前,一些FSA里面的概念要了解一下。

  1. 字符集∑ ,比如说∑={a,b,c}说明主串和子串中只含有a,b,c三个字母
  2. 状态的有限集合Q, 用于字符串匹配时就是Q={1…m},m是子串长度,状态1是初始态

当然算法导论里还有更多的相关概念,但是关于KMP的FSA用这两个就够了。
FSA里字符集∑的元素构成状态表的列,Q的元素(即每个状态)构成状态表的行。所以如果∑的大小为n, Q的大小是m,则表的大小是n*m,如果没有优化,中文的FSA状态表可以有20k列(所以说是杀鸡用牛刀)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值