【原創】樸素的模式比對和改進的模式比對(KMP)演算法說明(草稿)

來源:互聯網
上載者:User

樸素的模式比對和改進的模式比對(KMP)演算法說明
   LEWISLAU
前言:最近複習資料結構,以前老師講的時候居然忽略了串。汗,我們學校的確牛B。某仁兄告訴我,KMP基本是資料結構裡面難度比較大的演算法了,所以掌握了它,至少從心理上給我了很大的鼓舞,但是這個演算法是我詢問老師才掌握的,呵呵。言規正傳,開始說KMP演算法。
在說改進的模式比對(KMP)演算法之前我們先說樸素的模式比對:
其實很簡單,就是兩個字串逐位比較。在模式比對中:我們假定字串P在字串T中尋找是否有匹配的。此時,稱P為模式(Pattern)字串,稱T為目標(Target)字串。
OK,我一般比較喜歡以執行個體說明問題。
T:        a  b  d  a  b  d  a  b  c
P:        a  b  d  a  b  c

樸素的模式比對演算法

樸素的模式比對演算法就是用P和T依次比較,即為:
第一趟比較:   T:        a  b  d  a  b  d  a  b  c
   P:        a  b  d  a  b  c
               發現第6個元素(下標為5)d和c不相等,第一趟結束,此時比較了6次(6個元素)。
第二趟比較:   T:        a  b  d  a  b  d  a  b  c
   P:           a  b  d  a  b  c
                   第一個元素就不相等,第二趟結束,此時比較了1次(1個元素)。
第三趟比較:   T:        a  b  d  a  b  d  a  b  c
   P:              a  b  d  a  b  c
         第一個元素就不相等,第三趟結束,此時比較了1次(1個元素)。
第四趟比較:   T:        a  b  d  a  b  d  a  b  c
   P:                 a  b  d  a  b  c
         第一個元素相等,第二個元素也相等,第三、四、五、六都相等,匹配成功,第四趟結束,此時比較了6次(6個元素)。
匹配成功,共比較14次。但是這個是我們理想狀態下的匹配方案,實際中字串的長度遠遠不止這些。這種演算法是一種帶回逆的演算法,成為樸素的模式比對演算法。
假定:目標T長度為n,模式P長度為m,那麼它的最壞情況下,會比較次數可達到:
 (n - m + 1)*m  次;在眾多場合下m遠遠小於n,它的時間複雜度為O(n * m)。

改進的模式比對(KMP)演算法

KMP演算法就是消除了樸素匹配的回逆,利用一個失效函數(failure function)替代直接的回逆。思路如下:
第一趟比較:   T:        a  b  d  a  b  d  a  b  c
   P:        a  b  d  a  b  c
               發現第6個元素(下標為5)d和c不相等。此時,進入一個P串的處理:
此時取出P串,      a  b  d  a  b  c    因為是c不和d不匹配,去掉此項,獲得
a  b  d  a  b  
此時判斷  a  b  d  a  是否與 b  d  a  b  相等? 不等,進入下一輪判斷
此時判斷  a  b  d     是否與 d  a  b     相等? 不等,進入下一輪判斷
此時判斷  a  b        是否與 a  b        相等? 相等,結束第一趟總體判斷。
(先不要急,接下來我就會說為什麼這樣匹配和這樣匹配的用途!)
以上就是KMP的流程,為什麼要這樣做?在一些串中,目標串會遠遠長於模式串,如果每次都江模式串和目標串一一比較。此時時間複雜度當增加,而且在模式串中會出現很多的無效匹配,相當於無用功。但是假如先在模式串中進行比較,因為模式串會遠遠短於目標串,所以會相當減少時間複雜度。
以上是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.