【字符串处理】规则表达式的实现 -- 有限自动状态机
来源:互联网 发布:excel数据透视表怎么用 编辑:程序博客网 时间:2024/06/07 08:40
规则表达式在搜索模式串中可谓用途极广,那么他究竟通过什么算法达到那么大的威力呢?
答案就是字符串的额“有限自动状态机”,确切的说是模式串的有限自动状态机。所谓模式串就是你感兴趣的特定字符串,比如在谋篇文章中搜索"bai",这是模式字符串。对于这种
简单的串直接采用字符串匹配算法(例如KMP)之类的就可以解决了,采用KMP的时间复杂度是O(n+m),其中n是原串长度,m是模式串长度,如果m=O(n)的话,复杂度可以直接写为O(n),即搜索完一遍文章,就可以找到所有出现该模式串的起始位置。
以上是简单串的处理情况,那么对于某些特殊的查询需求就没办法满足了。例如你可能需要查找以bai开始,中间间隔一个任意字符,以lei结束的字符串,此时KMP不再适用。正确的方式是建立模式串的“有限自动状态机”,该状态机共有8种状态,起始状态是0,表示没有任何字符匹配。状态m表示原串长度为m的后缀子串,同时也是模式串长度为m的前缀子串,并且m是满足这种条件的最大值!(这句话非常重要,是自动状态机的核心,好好理解下)。随着输入字符的不同,状态机会由上一状态发生切换,变化到下一状态。当输入某字符使得状态机的状态变成8(串长加1)时,发生完全匹配,此时模式串被发现一次!在状态a下输入字符x,状态会切换到b,这个切换表示Pax最长后缀同时也是模式串P的最长前缀的长度是b,(具体例子以后补上)。
对于上一段提出的问题,就是在状态为3时(匹配了bai)输入任意一个字符,状态都会变成4,表示匹配了前4个字符。在状态4下只有输入了l才会切换到状态5,后缀根据实际输入决定切换到得状态! -- 这就是字符串的有限自动状态机解决实际问题的例子!
- 【字符串处理】规则表达式的实现 -- 有限自动状态机
- 有限自动状态机
- 自动机,状态机,有限自动机,有限状态机,有限状态自动机,非确定下有限状态自动,确定性有限状态自动机的区别于联系
- 将有限自动状态机应用到基于WATIR的前端测试中
- PB的数据有限规则
- 用有限自动机实现正则表达式的匹配
- 指针实现字符串的有限比较 strncmp()
- el表达式字符串的处理
- qt状态机的实现
- 标准状态机的实现
- 状态机的实现
- 状态机的实现
- lua实现的状态机
- 简单的状态机实现
- 状态机的实现
- 状态机的实现
- 单状态机的实现
- 指针实现 strncpy()字符串有限拷贝
- 【杂牌互联网产品观察员的一天】没干什么,是我对自己的过错!
- 黑马程序员-TCP传输练习出现的问题
- Replace Pioneer
- 你不知道的事情,你的敌人会告诉你
- 命令式数据并行
- 【字符串处理】规则表达式的实现 -- 有限自动状态机
- 【杂牌互联网产品观察员的一天】没干什么,假期应该闭门练功——我做的不对!
- php/File操作
- 服装店盘点太累太慢怎么改进?
- 大型网站系统架构分析(框架、服务器)
- ThunderServiceLite.exe 是何物
- 【案例】游戏Pop Corny零营销成本成功登陆App Store免费头名
- Java中那些默认自动运行的方法(待续)
- SQL数据加解密