字串的模式比對——Brute-Force演算法和KMP演算法

來源:互聯網
上載者:User

標籤:logs   思想   時間   字元   bsp   指標   位置   jpg   9.png   

  子串的定位操作是要在主串S中找出一個與子串T相同的子串,通常把主串S稱為目標,把子串T稱為模式
把從目標S中尋找模式為T的子串的過程稱為“模式比對”。


1.Brute-Force演算法的設計思想
  Brute-Force是普通的模式比對演算法。將主串S的第1個字元和模式T的第1個字元比較,若相等,繼續逐個比較後續字元;若不等,從主串的下一字元起,重新與模式的第一個字元比較,直到主串的一個連續子串字元序列與模式相等 ,傳回值為S中與T匹配的子序列第一個字元的序號,即匹配成功;否則,匹配失敗,傳回值 0。

def index(text,tgt_str):    j=0    tgt_len=len(tgt_str)    for i in range(len(text)):        if( text[i] == tgt_str[j] ):            j+=1          else:            i=i-j+1            j=0        if(j==tgt_len):            return i-tgt_len+1    return 0

2.Brute-Force演算法的特點:
  每次遇到匹配不成功的情況,指標i都要移到本次匹配的開始位置的下一位,稱這樣的指標移動為回溯
  指標的回溯越多,簡單模式比對的執行次數越多

Brute-Force匹配演算法的最壞時間複雜度為 O(n*m)
一般情況下BF演算法的時間複雜度為O(n+m)

 

3.KMP演算法的改進
  每當一趟匹配過程中出現字元比較不等時,不需回溯指標i,而是利用已經得到的“部分匹配”的結果將模式向右“滑動”儘可能遠的一段距離後,繼續比較
  KMP演算法的時間複雜度可以達到O(m+n)

4.KMP演算法的設計思想

  假設以指標 i 和 j 分別指示主串和模式中正待比較的字元,令 i 的初值為0,j 的初值為0
  若在匹配過程中,Si=Pj,則i和j分別增1,否則i不變,而j退到next[j]的位置再比較,若相等,則指標各自增1,否則j再退到下一個next值的位置,依次類推


若令next[j]=k,則next[j]表明當模式中第j個字元與主串中相應字元失配時,在模式中需重新和主串中該字元進行比較的字元的位置
模式串的next函數定義為
    

      

 

 

#coding=utf-8str1=‘9AA8‘text=‘8149AA86A5482A12958509AA8‘nextList=[0]def get_next(tgt_str):    i=1;j=0    global nextList    while(i < len(tgt_str)):        if(j == 0 or tgt_str[i-1]==tgt_str[j-1]):            i+=1;j+=1            nextList.append(j)        else:            j=nextList[j-1]    return nextListdef Index_KMP(text,tgt_str):    j=0    a=len(text)    b=len(tgt_str)    for i in range(a):        while j>0 and text[i]!=tgt_str[j]:            j=nextList[j-1]         #模式串向右移動        if( text[i] == tgt_str[j] ):            j+=1        if j==b:            print ‘success‘            print ‘location: ‘+str(i-b+1)            j = nextList[j-1]    else:        print ‘no match‘get_next(str1)print nextListIndex_KMP(text,str1)

 

字串的模式比對——Brute-Force演算法和KMP演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.