利用有限自动机进行字符串匹配
2015-11-03 15:42
260 查看
一个有限自动机M是一个5元组,(Q,q0,F,m,g)Q:状态的集合,q0:开始状态,F接收状态,m字符集,g:转换函数
文本字符串T,匹配模式P[1,2,3...m],每一个匹配模式都有一个对应的有限自动机,将字符串T按序输入到自动机中,如果到达接受状态,则匹配成功,下面介绍如何为P构造自动机。
1.状态集合Q为{0,1,2,3...m},开始状态q0是0,接受状态为m
2.对任意状态Q和字符a,转换函数g为:g(Q,a)=k(Pq a),Pq表示p[1]到p[q]的字符串,其中函数k(x)是一个从字母表(x)到{1,2,3...m}的映射,该函数是找到:既是字符串x的最长后缀,又是P的前缀的串,k(x)表示串的长度
下面对P求转换函数g的伪代码:
m=length[p]
for q:0 to m
for a:字母表
n=min(m,q+1)
while(n>=0)
if Pn是(Pq.a)的后缀(Pn与Pq.a从后往前对比)
g(q,a)=n
else n--
字符串T匹配自动机的过程的伪代码:
n=length[T]
q=0
for i:0 to n
q=g(q,T[i])
if q==m
匹配成功,输出i-m
文本字符串T,匹配模式P[1,2,3...m],每一个匹配模式都有一个对应的有限自动机,将字符串T按序输入到自动机中,如果到达接受状态,则匹配成功,下面介绍如何为P构造自动机。
1.状态集合Q为{0,1,2,3...m},开始状态q0是0,接受状态为m
2.对任意状态Q和字符a,转换函数g为:g(Q,a)=k(Pq a),Pq表示p[1]到p[q]的字符串,其中函数k(x)是一个从字母表(x)到{1,2,3...m}的映射,该函数是找到:既是字符串x的最长后缀,又是P的前缀的串,k(x)表示串的长度
下面对P求转换函数g的伪代码:
m=length[p]
for q:0 to m
for a:字母表
n=min(m,q+1)
while(n>=0)
if Pn是(Pq.a)的后缀(Pn与Pq.a从后往前对比)
g(q,a)=n
else n--
字符串T匹配自动机的过程的伪代码:
n=length[T]
q=0
for i:0 to n
q=g(q,T[i])
if q==m
匹配成功,输出i-m
相关文章推荐
- 文本属性Attributes
- 摩托罗拉对讲机调试
- 我的记事本项目之路(二)
- ajax介绍
- SQL中MAX()和MIN()函数的使用
- C中^和Java中^的不同
- 自定义配置文件读取
- 周边公交站台接口 查询附近的公交站台
- 两种方法基于jQuery实现IE浏览器兼容placeholder效果【转】
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- Disk Space Usage (sp_spaceused)
- 有人认为,“中文编程”是解决中国程序员编程效率的秘密武器,请问它是一个“银弹”么?
- python网络编程知识体系
- “双11”倒计时,电商行家如何玩转EDM?
- 从一段.html代码说起谈谈AngularJs中的双向数据绑定
- Android 图片滚动,加入自动播放功能,使用自定义属性实现,霸气十足!
- 大数据测试方法
- vs2008转vs2010碰到的一个坑
- 分布式搜索elasticsearch 索引文档的增删改查(RESTful)
- 二分查找程序算法和快速排序