Charles
Thinking low level, Coding high level
C++博客
首页
新随笔
联系
聚合
管理
posts - 71, comments - 41, trackbacks - 0
字符串无回溯BM匹配算法
接着来个无回溯的,一般教科书上都是用KMP作case的,这里给个平均效率更好的Boyer-Moore Algorithm实现
1
#include
<
cstring
>
2
int
BM(
const
char
*
text,
const
char
*
pattern)
3
{
4
int
arrShiftTable[
256
];
5
int
tLen
=
strlen(text);
6
int
pLen
=
strlen(pattern);
7
int
currPos, tReadPos, pReadPos;
8
9
//
exclude NUL
10
for
(
int
i
=
1
; i
<
sizeof
arrShiftTable
/
sizeof
(
int
); i
++
)
11
{
12
arrShiftTable[i]
=
pLen;
13
}
14
15
//
exclude the last char in pattern
16
for
(
int
i
=
0
; i
<
pLen
-
1
; i
++
)
17
{
18
arrShiftTable[pattern[i]]
=
pLen
-
1
-
i;
19
}
20
21
for
(currPos
=
pLen
-
1
; currPos
<
tLen;
/**/
/*
null
*/
)
22
{
23
for
(pReadPos
=
pLen
-
1
, tReadPos
=
currPos;
24
pReadPos
>=
0
&&
pattern[pReadPos]
==
text[tReadPos];
25
pReadPos
--
, tReadPos
--
)
26
/**/
/*
null
*/
;
27
28
if
(pReadPos
<
0
)
29
{
30
return
tReadPos
+
1
;
31
}
32
else
33
{
34
currPos
+=
arrShiftTable[text[currPos]];
35
}
36
37
}
//
outer for
38
39
return
-
1
;
40
}
算法原理就不细说了,有兴趣可以google一下,主要思想就是从模式串的最后一个字母向前比较。此处需要使用一个跳转表,以便查询不匹配时模式串前进的步数。
posted on 2006-11-16 18:03
Charles
阅读(1023)
评论(1)
编辑
收藏
引用
所属分类:
面试小算法
FeedBack:
#
re: 字符串无回溯BM匹配算法
2006-11-16 23:05 |
海上冰魂
汗。完全看不懂:(
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
Integer Partition
数1的个数
Fibonacci
简单打印内存的小玩意儿
矩阵式螺旋输出
求最大公约数与最小公倍数
数内置类型的bit数
计算Int最大最小值
两个堆栈模拟一个队列
检测补码表示
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
<
2007年7月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
决定开始写工作日记,记录一下自己的轨迹...
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
(70)
Helper Utility(1)
读书作笔记(3)
发泄(3)
面试小算法(27)
拿来主义(25)
随笔(10)
一般人儿我不告诉他(1)
随笔档案
(71)
2008年3月 (1)
2008年2月 (1)
2007年7月 (3)
2007年3月 (3)
2007年1月 (18)
2006年12月 (16)
2006年11月 (29)
charles推荐访问
Code Project
Linux Journal
Linux man pages
Single UNIX Specification
电子书1
电子书2
电子书3
搜索
积分与排名
积分 - 49500
排名 - 452
最新评论
1. re: 简单打印内存的小玩意儿
不错
--dddd
2. re: 寻找最长连续递增子序列
这个只能算是方法,效率太低了
--大物
3. re: 数单词数
规范化;门口麻烦机;那么孔方兄那么妈妈法;酿母菌法那么;风格那么明年;愤怒麻烦那么愤怒愤怒留念多孔蕈乐观好看的里边赶快巴拿马城,新年巴拿马国际法,不
--申诉台
4. re: 数单词数
感到发现看来自动化大会单行本打开怎么赶快电子管矛盾感动不动门口‘大批看病黄道婆民主
--申诉台
5. re: 移除字符
评论内容较长,点击标题查看
--D_BOY
阅读排行榜
1. 求最大公约数与最小公倍数(3480)
2. COFF格式续篇—Lib文件的结构zz(2188)
3. 计算Int最大最小值(2108)
4. IA32/Windows&Linux高精度计时器(1727)
5. 寻找最长递增子序列(1464)
评论排行榜
1. 计算Int最大最小值(5)
2. IA32/Windows&Linux高精度计时器(4)
3. ZMD(3)
4. 寻找最长连续递增子序列(3)
5. 两个堆栈模拟一个队列(3)