BM模式匹配算法原理(圖解)

BM模式匹配算法原理(圖解)算法

首先,先簡單說明一下有關BM算法的一些基本概念。3d

BM算法是一種精確字符串匹配算法(區別於模糊匹配)。blog

BM算法採用從右向左比較 的方法,同時應用到了兩種啓發式規則,即壞字符規則 和好後綴規則 ,來決定向右跳躍的距離。ip

BM算法的基本流程: 設文本串T,模式串爲P。首先將T與P進行左對齊,而後進行從右向左比較 ,以下圖所示:字符串

    如果某趟比較不匹配時,BM算法就採用兩條啓發式規則,即壞字符規則 和好後綴規則 ,來計算模式串向右移動的距離,直到整個匹配過程的結束。       數學

下面,來詳細介紹一下壞字符規則 和好後綴規則 。原理

     首先,詮釋一下壞字符和好後綴的概念。搜索

   請看下圖:方法

     圖中,第一個不匹配的字符(紅色部分)爲壞字符,已匹配部分(綠色)爲好後綴。im

    1)壞字符規則(Bad Character):

          在BM算法從右向左掃描的過程當中,若發現某個字符x不匹配,則按以下兩種狀況討論:

               i. 若是字符x在模式P中沒有出現,那麼從字符x開始的m個文本顯然不可能與P匹配成功,直接所有跳過該區域便可。

               ii. 若是x在模式P中出現,則以該字符進行對齊。

         用數學公式表示,設Skip(x)爲P右移的距離,m爲模式串P的長度,max(x)爲字符x在P中最右位置。

                

       例1:

         下圖紅色部分,發生了一次不匹配。

               

   

        計算移動距離Skip(c) = 5 - 3 = 2,則P向右移動2位。

        移動後以下圖:

            

   

          

    2)好後綴規則(Good Suffix):

         若發現某個字符不匹配的同時,已有部分字符匹配成功,則按以下兩種狀況討論:

              i. 若是在P中位置t處已匹配部分P'在P中的某位置t'也出現,且位置t'的前一個字符與位置t的前一個字符不相同,則將P右移使t'對應t方纔的所在的位置。

              ii. 若是在P中任何位置已匹配部分P'都沒有再出現,則找到與P'的後綴P''相同的P的最長前綴x,向右移動P,使x對應方纔P''後綴所在的位置。

         用數學公式表示,設Shift(j)爲P右移的距離,m爲模式串P的長度,j 爲當前所匹配的字符位置,s爲t'與t的距離(以上狀況i)或者x與P''的距離(以上狀況ii)。

             

   

       以上過程有點抽象,因此咱們繼續圖解。

         例2:

          下圖中,已匹配部分cab(綠色)在P中再沒出現。

           

   

         再看下圖,其後綴T'(藍色)與P中前綴P'(紅色)匹配,則將P'移動到T'的位置。

           

   

         移動後以下圖:

            

          自此,兩個規則講解完畢。

     在BM算法匹配的過程當中,取SKip(x)與Shift(j)中的較大者做爲跳躍的距離。

     BM算法預處理時間複雜度爲O(m+s),空間複雜度爲O(s),s是與P, T相關的有限字符集長度,搜索階段時間複雜度爲O(m·n)。

最好狀況下的時間複雜度爲O(n/m),最壞狀況下時間複雜度爲O(m·n)。

相關文章
相關標籤/搜索