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
閱讀(1039)
評論(1)
編輯
收藏
引用
所屬分類:
面試小算法
FeedBack:
#
re: 字符串無回溯BM匹配算法
2006-11-16 23:05 |
海上冰魂
汗。完全看不懂:(
回復
更多評論
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
Integer Partition
數1的個數
Fibonacci
簡單打印內存的小玩意兒
矩陣式螺旋輸出
求最大公約數與最小公倍數
數內置類型的bit數
計算Int最大最小值
兩個堆棧模擬一個隊列
檢測補碼表示
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Copyright ©2025 Charles Powered By:
博客園
模板提供:
滬江博客
<
2006年11月
>
日
一
二
三
四
五
六
29
30
31
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
1
2
3
4
5
6
7
8
9
決定開始寫工作日記,記錄一下自己的軌跡...
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(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
搜索
積分與排名
積分 - 50780
排名 - 448
最新評論
1.?re: 簡單打印內存的小玩意兒
不錯
--dddd
2.?re: 尋找最長連續遞增子序列
這個只能算是方法,效率太低了
--大物
3.?re: 數單詞數
規范化;門口麻煩機;那么孔方兄那么媽媽法;釀母菌法那么;風格那么明年;憤怒麻煩那么憤怒憤怒留念多孔蕈樂觀好看的里邊趕快巴拿馬城,新年巴拿馬國際法,不
--申訴臺
4.?re: 數單詞數
感到發現看來自動化大會單行本打開怎么趕快電子管矛盾感動不動門口‘大批看病黃道婆民主
--申訴臺
5.?re: 移除字符
評論內容較長,點擊標題查看
--D_BOY
閱讀排行榜
1.?求最大公約數與最小公倍數(3516)
2.?COFF格式續篇—Lib文件的結構zz(2256)
3.?計算Int最大最小值(2144)
4.?IA32/Windows&Linux高精度計時器(1750)
5.?尋找最長遞增子序列(1497)
評論排行榜
1.?計算Int最大最小值(5)
2.?IA32/Windows&Linux高精度計時器(4)
3.?兩個堆棧模擬一個隊列(3)
4.?ZMD(3)
5.?數單詞數(3)
久久无码一区二区三区少妇
|
久久亚洲精品人成综合网
|
日韩人妻无码精品久久久不卡
|
久久久噜噜噜久久中文福利
|
久久国产精品99久久久久久老狼
|
亚洲国产精品久久久久
|
久久99精品九九九久久婷婷
|
一本一本久久a久久综合精品蜜桃
|
精品综合久久久久久888蜜芽
|
精品久久久久久久国产潘金莲
|
久久综合九色综合97_久久久
|
久久久无码精品亚洲日韩蜜臀浪潮
|
国产精品内射久久久久欢欢
|
热99RE久久精品这里都是精品免费
|
亚洲va中文字幕无码久久
|
午夜精品久久久久久
|
国内精品免费久久影院
|
久久精品国产精品亚洲毛片
|
国产69精品久久久久观看软件
|
7777久久久国产精品消防器材
|
国产精品99久久久久久猫咪
|
亚洲AV无一区二区三区久久
|
欧美久久久久久
|
亚洲国产视频久久
|
久久精品成人免费国产片小草
|
91久久香蕉国产熟女线看
|
久久久久久久亚洲Av无码
|
天天躁日日躁狠狠久久
|
久久亚洲sm情趣捆绑调教
|
久久精品国产第一区二区三区
|
国产福利电影一区二区三区久久老子无码午夜伦不
|
麻豆AV一区二区三区久久
|
亚洲成人精品久久
|
久久免费视频网站
|
日本一区精品久久久久影院
|
91精品国产乱码久久久久久
|
狠狠干狠狠久久
|
精品久久久久久国产三级
|
久久99精品国产麻豆不卡
|
色婷婷综合久久久久中文字幕
|
久久精品国产亚洲av瑜伽
|