999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

字符串模式匹配算法的研究及改進

2013-09-12 04:24:50畢智超
電子測試 2013年20期

畢智超

(陜西職業(yè)技術學院,陜西西安,710100)

0 引言

在計算機信息科學領域里面,模式匹配是一個重要的研究課題。在拼寫檢查、基于字典的語言翻譯、萬維網(wǎng)搜索引擎、計算機病毒特征碼匹配、數(shù)據(jù)壓縮、以及DNA序列匹配等應用中,都需要進行模式匹配。字符串的模式匹配問題描述如下:設T和P是兩個給定的串,在串T中找等于P的子串的過程稱為模式匹配,其中,T稱為主串,P稱為模式。如果找到,稱為匹配成功,否則稱為匹配失敗。

模式匹配問題的特點:

(1)算法的一次執(zhí)行時間不容忽視:問題規(guī)模通常很大,常常需要在大量信息中進行匹配;

(2)算法改進所取得的積累效益不容忽視:模式匹配操作經(jīng)常被調(diào)用,執(zhí)行頻率高。

如何改進模式匹配算法、提高模式匹配效率, 是本文研究的一個關鍵問題。

1 樸素的模式匹配BF算法

BF算法是一種簡單直觀的模式匹配算法,其基本思想是:從主串T的第一字符開始和模式P的第一個字符進行比較,若相等,則繼續(xù)比較兩者的后續(xù)字符;否則,從主串T的第二個字符開始和模式P的第一個字符進行比較。重復上述過程,若P中的字符全部比較完畢,則說明匹配成功,返回主串T在本趟比較中的起始位置;否則匹配失敗,返回0。

例如 :主串 T=t0t1t2…tm-1…tn-1,模式 P= p0p1p2…pm-1。如果t0=p0,t1=p1,t2=p2,…tm-1=pm-1,則匹配成功,返回模式串第 0個字符p0在主串中匹配的位置;如果在其中某個位置i:ti≠pi,比較不等,這時可將模式串P右移一位,用P中字符從頭開始與T中字符依次比較。如此反復執(zhí)行,直到出現(xiàn)以下兩種情況之一,就可以結(jié)束算法:一種情況是執(zhí)行到某一趟,模式串的所有字符都與目標串對應字符相等,則匹配成功;另一種情況是P已經(jīng)移到最后可能與T比較的位置,但不是每一個字符都能與T匹配,這是匹配失敗的情形,函數(shù)將返回0。

這個算法是一種帶回溯的算法。一旦比較不等,就將模式P右移一位,從p0開始在進行比較。若設目標T的長度為n,模式P的長度為m,在最壞情況下,最多比較n-m+1趟,每趟比較都在最后才出現(xiàn)不等,要做m次比較,總比較次數(shù)達到(n-m+1)*m。在多數(shù)場合下m遠遠小于n,因此,算法的時間復雜度為O(n*m)。

2 模式匹配的KMP算法

分析以上算法可知,BF算法是一種帶回溯的匹配算法,也正是回溯使得BF算法效率低下。事實上,這些回溯并不一定是必要的。

例如 :主串 T=t0t1…tn-1,模式 P= p0p1…pm-1。用前面介紹的BF算法做第s趟比較時,從目標T的第s個位置ts與模式P的第0個位置p0開始進行比較,直到在目標T第s+j位置ts+j“失配”。這時,應有 tsts+1ts+2…ts+j-1= p0p1p2…pj-1(1), 按 BF 算法,下一趟應從目標T的第s+1個位置起用ts+1與模式P中p0對齊,重新開始匹配比較。如果在模式P中,p0p1…pj-2≠p1p2…pj-1(2),則第s+1趟不用進行比較,就能斷定它必然“失配”。因為由(1)式和(2)式可知:p0p1…pj-2≠ts+1ts+2…ts+j-1(= p1p2…pj-1)既然如此,第s+1趟可以不做。依次類推,直到對于某一個值k,使得 :p0p1…pk+1≠ pj-k-2pj-k-1…pj-1且 p0p1…pk= pj-k-1pj-k…pj-1才有 p0p1…pk= ts+j-k-1ts+j-k…ts+j-1(=pj-k-1pj-k…pj-1),這樣,我們可以把在第s趟比較“失配”時的模式P從當前位置直接向右“滑動”j-k-1位。這時,因為目標T中ts+j之前已經(jīng)與模式P中pj之前的字符匹配了,故而可以直接從T中的ts+j與模式中的pk+1開始,繼續(xù)向下進行匹配比較。

在這個算法中,目標T在第s趟比較失配時,掃描指針s不必回溯。算法下一趟繼續(xù)從此處開始向下進行匹配比較;而在模式P中,掃描指針p應退回到pk+1位置。

關于k的確定方法,可以用一個next特征函數(shù)來確定:當模式P中第j個字符與目標T中相應字符失配時,模式P中應該由哪個字符(設為第k+1個)與目標中剛失配的字符重新繼續(xù)進行比較。特征函數(shù)next定義如下:

設模式串長為m,則求next的算法時間復雜度是O(m)。若主串長為n,KMP算法的時間復雜度是O(n);如果包括求next(j)的時間,KMP算法的時間復雜度是O(n+m)。

3 改進的模式匹配算法

串模式匹配算法待解決關鍵問題是:模式串在主串某個位置比較失敗時,如何使模式串向右移動最佳距離,盡量多的跳過不必要比較的字符,減少匹配的次數(shù)。通過上述匹配算法的分析研究,可以看出KMP算法避免了BF算法頻繁回溯,提高了模式匹配的工作效率,但是我們對于模式匹配算法還可以進一步改進,最大限度的減少匹配的次數(shù)。改進后的算法簡單實用,便于理解。

改進算法的精髓是對模式串移動距離的確定。同理設主串T=t0t1…tn-1,模式 P= p0p1…pm-1。我們做匹配比較時,設目標 T 的第i個位置ti與模式P的第0個位置p0開始進行比較。在比較過程中失配于 pj處,即 titi+1ti+2…ti+j-1= p0p1p2…pj-1,且 ti+-j≠pj。首先定義一個特征函數(shù)S來確定主串中出現(xiàn)的字符x(x的值為當前字符)在模式P中的位置。此算法還要在模式P中補充一個字符pm,該字符的位置緊隨pm-1,取值可任意,其目的一是方便對特征函數(shù)S(x)的定義;二是x能取到ti+m的值。這樣模式P= p0p1…pm-1pm。

特征函數(shù)S(x)定義如下:

其中,x在目標T中取值,取失配位置j和其后的字符即x=ti+k,j≤k≤m,且x取值位置的變化可產(chǎn)生前面模式串的子串p0p1…pk-1長度的變化。特征函數(shù)S(x)的作用是求失配時模式串P向右滑動的合理距離,這樣就可以減少匹配次數(shù)。

此算法如果模式P字符數(shù)m較大,此時在逐一的計算求滑動距離,那么算法收益明顯降低。其實可采用目標T中的三個位置的字符來計算,分別為ti+j、ti+j+1和ti+m。之所以讓ti+j+1和ti+m參與進來決定模式P的滑動距離其目的有二:一是減少函數(shù)S的運算次數(shù);二是如果前面發(fā)生失配,那么模式勢必需要向右滑動。假如S(ti+j+1)和S(ti+m)的取值有一方屬于函數(shù)S的第二種情況,最終移動距離的確定屬于該方,這時ti+j+1和ti+m對于移動距離屬于該方的必然會有模式移動的距離與模式中和它相同的字符對齊。假如這兩位置上的字符有一方不屬于模式串時,最終移動距離的確定屬于該方,這時能夠獲得最大的滑動距離。所以我們之需要考慮它們參與所產(chǎn)生的移動距離即可。此算法最終移動距離的確定是通過計算 S(ti+j)、S(ti+j+1)和 S(ti+m)并取其最大值。

下面通過一個實例來說明滑動距離的求解。

例 :T=“thefollowsamaselomesample”,P=“sample”。第 一趟比較:i=0,j=0,0≤k≤6,S(x=t0=t)=1(因為p0≠ti,取函數(shù)S的第三種情況);S(x=t1=h)=2(k=1,h? {p0},取函數(shù)S的第一種情況);但 S(x=t6=l)=2(k=6,l∈ {p0p1p2p3p4p5}且q=4,取函數(shù)S的第二種情況)。模式移動位移為2。

第二趟比較:i=2,j=0,0≤ k≤ 6,S(x=t2=e)=1;S(x=t3=f)=2;S(x=t8=w)=7。模式移動位移為7。

第三趟比較:i=9,j=3,3≤ k≤ 6,S(x=t12=a)=2;S(x=t13=s)=4;S(x=t15=l)=2。模式移動位移為4。

第四趟比較:i=13,j=1,1≤ k≤ 6,S(x=t14=e)=2;S(x=t15=l)=3;S(x=t19=s)=6。模式移動位移為6。

第五趟比較:i=19,匹配成功。

匹配過程如下圖所示

圖1 模式匹配過程

筆者通過實驗論證,對于上述實例用改進后的算法需要進行5趟共12次字符比較;而KMP算法需要18趟共27次字符比較。如果問題規(guī)模很大時,此算法更能體現(xiàn)出它的高效求解。

4 結(jié)束語

字符串模式匹配技術在當今已經(jīng)成為解決計算機科學中的關鍵技術之一。本文改進后的算法能夠很大程度上提高匹配檢測的效率。如何能更好的應用此算法,是我們今后研究的工作重點。

[1]李洋,王康,謝萍.模式匹配改進算法[J].計算機應用研究,2004,21(4):58-59.

[2]程偉,劉玉軍,盧澤新.最佳比較序字符串匹配算法研究和應用[J].計算機工程與設計2004,25(9):1430-1432.

[3]殷人昆.數(shù)據(jù)結(jié)構(gòu)(用面向?qū)ο蠓椒ㄅcC++語言描述)[M].北京:清華大學出版社,2007.

主站蜘蛛池模板: 久热99这里只有精品视频6| 日本a级免费| 国产中文在线亚洲精品官网| 伊人婷婷色香五月综合缴缴情 | 无码丝袜人妻| 欧美黄网站免费观看| 四虎成人在线视频| 国产成人在线无码免费视频| 制服丝袜一区| 国产精品天干天干在线观看| 一本大道香蕉中文日本不卡高清二区| 国产在线拍偷自揄观看视频网站| 久久免费视频播放| 在线视频一区二区三区不卡| 亚洲一级毛片在线观播放| 亚洲天堂福利视频| 国产自产视频一区二区三区| 青草视频久久| 综合久久五月天| 91成人试看福利体验区| 91探花在线观看国产最新| 欧洲欧美人成免费全部视频| 精品成人免费自拍视频| www欧美在线观看| 99er这里只有精品| 精品国产成人三级在线观看| 免费一极毛片| 日韩久草视频| 亚洲人成网站在线播放2019| 波多野结衣一区二区三区四区视频| 亚洲国产无码有码| 沈阳少妇高潮在线| 又爽又大又黄a级毛片在线视频 | 毛片免费网址| 久久国语对白| 日韩人妻无码制服丝袜视频| 国产SUV精品一区二区6| 亚洲成人黄色在线| 国内黄色精品| 又污又黄又无遮挡网站| 天天综合天天综合| 亚洲欧美一区二区三区图片| 热热久久狠狠偷偷色男同| 青青草国产免费国产| 国产黑丝一区| 伊人精品成人久久综合| 亚洲AV无码乱码在线观看裸奔| a欧美在线| 亚洲黄网在线| 精品三级网站| 夜夜操国产| 日韩a级片视频| 国产成人av大片在线播放| 青草视频网站在线观看| 亚洲天堂成人| 亚洲日韩日本中文在线| 亚洲天堂精品在线观看| 精品国产网| 久久精品视频一| 粉嫩国产白浆在线观看| 嫩草国产在线| 日韩午夜伦| 午夜精品国产自在| 国产区精品高清在线观看| 88国产经典欧美一区二区三区| 日韩视频福利| 欧美a在线看| 欧美亚洲激情| 欧美爱爱网| 久久网欧美| 欧美性天天| 亚洲香蕉在线| 国产美女主播一级成人毛片| 国产超碰一区二区三区| 久久亚洲精少妇毛片午夜无码 | 国产精品欧美在线观看| 中文字幕在线不卡视频| 亚洲欧美不卡视频| 国产午夜看片| 久久婷婷五月综合色一区二区| 伦精品一区二区三区视频| 国产精品视频a|