Charles
Thinking low level, Coding high level
C++博客
首頁(yè)
新隨筆
聯(lián)系
聚合
管理
posts - 71, comments - 41, trackbacks - 0
字符串無(wú)回溯BM匹配算法
接著來(lái)個(gè)無(wú)回溯的,一般教科書(shū)上都是用KMP作case的,這里給個(gè)平均效率更好的Boyer-Moore Algorithm實(shí)現(xiàn)
?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
}
算法原理就不細(xì)說(shuō)了,有興趣可以google一下,主要思想就是從模式串的最后一個(gè)字母向前比較。此處需要使用一個(gè)跳轉(zhuǎn)表,以便查詢不匹配時(shí)模式串前進(jìn)的步數(shù)。
posted on 2006-11-16 18:03
Charles
閱讀(1036)
評(píng)論(1)
編輯
收藏
引用
所屬分類(lèi):
面試小算法
FeedBack:
#
re: 字符串無(wú)回溯BM匹配算法
2006-11-16 23:05 |
海上冰魂
汗。完全看不懂:(
回復(fù)
更多評(píng)論
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開(kāi)源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
Integer Partition
數(shù)1的個(gè)數(shù)
Fibonacci
簡(jiǎn)單打印內(nèi)存的小玩意兒
矩陣式螺旋輸出
求最大公約數(shù)與最小公倍數(shù)
數(shù)內(nèi)置類(lèi)型的bit數(shù)
計(jì)算Int最大最小值
兩個(gè)堆棧模擬一個(gè)隊(duì)列
檢測(cè)補(bǔ)碼表示
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問(wèn)
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
決定開(kāi)始寫(xiě)工作日記,記錄一下自己的軌跡...
常用鏈接
我的隨筆
我的評(píng)論
我參與的隨筆
留言簿
(4)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆分類(lèi)
(70)
Helper Utility(1)
讀書(shū)作筆記(3)
發(fā)泄(3)
面試小算法(27)
拿來(lái)主義(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推薦訪問(wèn)
Code Project
Linux Journal
Linux man pages
Single UNIX Specification
電子書(shū)1
電子書(shū)2
電子書(shū)3
搜索
積分與排名
積分 - 50552
排名 - 449
最新評(píng)論
1.?re: 簡(jiǎn)單打印內(nèi)存的小玩意兒
不錯(cuò)
--dddd
2.?re: 尋找最長(zhǎng)連續(xù)遞增子序列
這個(gè)只能算是方法,效率太低了
--大物
3.?re: 數(shù)單詞數(shù)
規(guī)范化;門(mén)口麻煩機(jī);那么孔方兄那么媽媽法;釀母菌法那么;風(fēng)格那么明年;憤怒麻煩那么憤怒憤怒留念多孔蕈樂(lè)觀好看的里邊趕快巴拿馬城,新年巴拿馬國(guó)際法,不
--申訴臺(tái)
4.?re: 數(shù)單詞數(shù)
感到發(fā)現(xiàn)看來(lái)自動(dòng)化大會(huì)單行本打開(kāi)怎么趕快電子管矛盾感動(dòng)不動(dòng)門(mén)口‘大批看病黃道婆民主
--申訴臺(tái)
5.?re: 移除字符
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--D_BOY
閱讀排行榜
1.?求最大公約數(shù)與最小公倍數(shù)(3513)
2.?COFF格式續(xù)篇—Lib文件的結(jié)構(gòu)zz(2253)
3.?計(jì)算Int最大最小值(2138)
4.?IA32/Windows&Linux高精度計(jì)時(shí)器(1747)
5.?尋找最長(zhǎng)遞增子序列(1494)
評(píng)論排行榜
1.?計(jì)算Int最大最小值(5)
2.?IA32/Windows&Linux高精度計(jì)時(shí)器(4)
3.?ZMD(3)
4.?尋找最長(zhǎng)連續(xù)遞增子序列(3)
5.?兩個(gè)堆棧模擬一個(gè)隊(duì)列(3)
国产亚洲婷婷香蕉久久精品
|
精品久久人人爽天天玩人人妻
|
伊人久久综合无码成人网
|
色偷偷偷久久伊人大杳蕉
|
久久精品亚洲日本波多野结衣
|
久久av高潮av无码av喷吹
|
久久久久久久女国产乱让韩
|
久久精品亚洲中文字幕无码麻豆
|
久久艹国产
|
久久电影网一区
|
久久久久高潮综合影院
|
一本大道加勒比久久综合
|
伊人久久大香线蕉亚洲五月天
|
18岁日韩内射颜射午夜久久成人
|
66精品综合久久久久久久
|
99久久香蕉国产线看观香
|
久久国产综合精品五月天
|
7777久久亚洲中文字幕
|
久久精品国产亚洲AV影院
|
久久精品中文字幕有码
|
久久久久久午夜成人影院
|
亚洲国产精品嫩草影院久久
|
91久久精品国产成人久久
|
久久精品人成免费
|
久久国产高潮流白浆免费观看
|
无夜精品久久久久久
|
精品国产91久久久久久久a
|
国产精品久久久久久久久
|
综合人妻久久一区二区精品
|
欧美日韩中文字幕久久伊人
|
色婷婷久久综合中文久久蜜桃av
|
日日狠狠久久偷偷色综合免费
|
久久国产精品一区
|
国产毛片久久久久久国产毛片
|
久久国产免费观看精品
|
久久天天躁狠狠躁夜夜avapp
|
亚洲欧美久久久久9999
|
一本色综合久久
|
一本久道久久综合狠狠爱
|
老男人久久青草av高清
|
久久久这里有精品
|