版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
模式匹配的一般算法模式匹配:子串的定位操作基本思想:從主串s
的第一個(gè)字符起和模式的第一個(gè)字符比較之,若相等,則繼續(xù)逐個(gè)比較后序字符,否則從主串的第二個(gè)字符起再重新和模式的字符比較之。依次類推,續(xù)字符序列相等,則稱匹配成功,否直至模式t
中的每個(gè)字符依次和主串s
中的則匹配不成功。算法FUNC
index_BF(s,t:strtp):integer;{求模式串
t
在主串
s
中的位置的定位函數(shù)
}I:=1;
j:=1
{指針初始化
}while
(
I
<=
s.curlen
)
and
(
j<=
t.curlen)
DOIF
s.ch
[I]
=
t.ch
[j]THEN
[
I:=I+1
;
j:=j+1]
{繼續(xù)比較后續(xù)字符}ELSE
[I:=I-j+2; j:=1];
{指針后退重新匹配}IF
j>
t.curlen
THEN RETURN
(I-t.curlen
) ELSE
RETURN(0)ENDF;{
index_BF
}特點(diǎn)
:一般情況下時(shí)間復(fù)雜度為O(n+m),
的情況下為
O(n*m):
主串中存在多個(gè)和模式串“部分匹配”的子串,引起指針I(yè)
的多次回溯。如模式串為‘00000001’
主串為‘0000000000000000000000000000000000000000000000000000000000001’模式匹配的改進(jìn)算法---KMP算法對(duì)普通算法的改進(jìn):每當(dāng)一趟匹配過(guò)程中出現(xiàn)字符比較不等時(shí),不需回溯I指針,而是利用已經(jīng)得到的“部分匹配”結(jié)果將模式向右
“滑動(dòng)”盡可能遠(yuǎn)的一段距離后,繼續(xù)進(jìn)行比較。改進(jìn)算法的匹配過(guò)程示例I=3第三趟匹配
a
b
a
b
c
a
b
c
a
c
b
a
ba
b
c
a
c第一趟匹配abab
cabc
acba
babcJ=3II=7第二趟匹配abab
cabc
acba
bJ=5a b
c
a
cJ=1IJ=2J=6I=11主串為‘S1S2…Sn’,
模式串為‘P1P2…Pm’
,為了實(shí)現(xiàn)改進(jìn)算法,需要解決如下問(wèn)題當(dāng)主串中的第I
個(gè)字符與模式中第J
個(gè)字符比較不等時(shí),主串中第I
字符(指針不回溯)應(yīng)與模式中哪個(gè)字符再比較(模式串向右滑行)?如何求J對(duì)應(yīng)的K?假設(shè)此時(shí)應(yīng)與模式中第K個(gè)(k<j)字符比較,則模式中前K-1個(gè)字符的子串必須滿足下列關(guān)系式,且不可能存在K’>K滿足下列關(guān)系式:‘P1P2…Pk-1’=‘Si-k+1Si-k+2…Si-1’因?yàn)椴糠制ヅ涞慕Y(jié)果是‘Pj-k+1Pj-k+2…Pj-1’=‘Si-k+1Si-k+2…Si-1’所以‘P1P2…Pk-1’=
‘Pj-k+1Pj-k+2…Pj-1’若模式串中存在滿足上式的兩個(gè)子串,則當(dāng)匹配過(guò)程中第I
個(gè)字符與模式中第J
個(gè)字符比較不等時(shí),僅需將模式向右滑動(dòng)至模式中第K個(gè)字符和主串中第I
個(gè)字符對(duì)齊若令next[
j]=k,則next[
j]
表明當(dāng)模式中第J個(gè)字符與主串中相應(yīng)字符比較不等時(shí),在模式中需重新和主串中該字符進(jìn)行比較的字符位置。0
當(dāng)J=1時(shí)Next[j]= Max
{k|
1<k<j
且‘P1…Pk-1’=‘Pj-k+1…Pj-1’J1
其他情況1
2
3
4
5
6
7
8a
b
a
a b
c
a
c0
1
1
2 2
3
1
2示例:模式串Next[j]KMP算法FUNC
index_KMP(s,t:strtp):integer;
{利用模式串的next函數(shù)求模式串T
在主串
s
中位置的KMP算法
}I:=1;
j:=1 {
指針初始化
}while
(
I
<=
s.curlen
)
and
(
j<=
t.curlen)
DOIF
(j=0)
OR (
s.ch
[I]
=
t.ch
[j]
)THEN
[
I:=I+1
;
j:=j+1] {
繼續(xù)比較下一對(duì)字符
}ELSE j:=next
[
j]
{模式串向右滑動(dòng)}IF
j>
t.curlen
THEN RETURN
(I-t.curlen
) ELSE
RETURN(0)ENDF;{
index_kmp
}如何求模式串next函數(shù)?next
函數(shù)的求法next
函數(shù)值僅取決于模式串本身而和相匹配的的主串無(wú)關(guān)從定義出發(fā)用遞推的方法求得next
函數(shù)值:next[1]=
0next[
j]=k
表明在模式串中‘P1P2…Pk-1’=‘Pj-k+1…Pj-1’其中k為滿足1<
k
<
j的某個(gè)值,不可能存在等式k’>k
滿足等式。求
Next[j+1]①若Pk=Pj,則表明在模式串中‘P1P2…Pk’=‘Pj-k+1…Pj’
不可能存在k’>k,滿足等式②若NPkex≠tP[j,+則1]表=k明+1在=n模ex式t[串j]+中1
‘P1P2…Pk’≠‘Pj-k+1…Pj’
此時(shí)可把next
函數(shù)值的問(wèn)題看成是一個(gè)模式匹配的問(wèn)題,整個(gè)模式串既是主串又是模式串。已有‘P1P2…Pk-1’=
‘Pj-k+1…Pj-1’
則當(dāng)Pk≠Pj時(shí),應(yīng)將模式向右滑動(dòng)至以模式中的第next[k]個(gè)字符和主串中的第J
個(gè)字符相比較。若Pj=Pnext[k],則next[j+1]=next[
k]+1若Pj≠Pnext[k],則將模式繼續(xù)向右滑動(dòng)直至模式中第next[next[k]]個(gè)字符與Pj對(duì)齊…依次類推,直至Pj
和模式中某個(gè)字符匹配成功或者不存在任何K’(1
<K’<
J)滿足部分匹配,則有next[j+1]=1求next函數(shù)值的算法PROC
get--next(t:strtp;VAR
next
:ARRAY
[1..t.curlen]
of
integer){求模式串t
的next函數(shù)值并存入數(shù)組next
}j:=1;
k:=0;
next[1]:=0
{初始化
}while j<=
t.curlen
DOIF
(k=0)
OR (t.ch
[j]
=
t.ch
[k]
)THEN
[ j:=j+1;
k:=k+1;
next[
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年高分子材料性能檢測(cè)及評(píng)價(jià)的標(biāo)準(zhǔn)試題目
- 2026年職業(yè)健康與安全政策法規(guī)培訓(xùn)題集
- 2026年經(jīng)濟(jì)理論宏觀經(jīng)濟(jì)學(xué)研究熱點(diǎn)題庫(kù)
- 2026年通信工程師考試通信原理與技術(shù)標(biāo)準(zhǔn)試題集
- 企業(yè)春季消防安全檢查
- 母嬰護(hù)理師溝通技巧培訓(xùn)
- 睡眠障礙:睡眠呼吸暫停的應(yīng)對(duì)策略
- 2026年護(hù)士執(zhí)業(yè)資格考試高頻考點(diǎn)試題
- 2026西安市胸科醫(yī)院招聘腎內(nèi)科醫(yī)師參考考試題庫(kù)及答案解析
- 2026年青島酒店管理職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試參考題庫(kù)含詳細(xì)答案解析
- 護(hù)理護(hù)理評(píng)估工具與應(yīng)用
- 2025年孵化器與加速器發(fā)展項(xiàng)目可行性研究報(bào)告
- 消防廉潔自律課件大綱
- 道路二灰碎石基層施工技術(shù)方案及質(zhì)量控制
- DB37∕T 4491-2021 三倍體單體牡蠣淺海筏式養(yǎng)殖技術(shù)規(guī)范
- 2025年注冊(cè)監(jiān)理工程師繼續(xù)教育市政公用工程專業(yè)考試題及答案
- (2025)新課標(biāo)義務(wù)教育數(shù)學(xué)(2022年版)課程標(biāo)準(zhǔn)試題庫(kù)(附含答案)
- 金太陽(yáng)陜西省2028屆高一上學(xué)期10月月考物理(26-55A)(含答案)
- 2025年青海省事業(yè)單位招聘考試教師物理學(xué)科專業(yè)知識(shí)試卷解析
- 成都城投集團(tuán)招聘筆試試題
- 2025年安全生產(chǎn)知識(shí)教育培訓(xùn)考試試題及標(biāo)準(zhǔn)答案
評(píng)論
0/150
提交評(píng)論