日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BM算法图解

發(fā)布時間:2023/12/10 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BM算法图解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

BM算法的概念:

BM算法也叫做精確字符集算法,它是一種從右往左比較(后往前),同時也應(yīng)用到了兩種規(guī)則壞字符、好后綴規(guī)則去計算我們移動的偏移量的算法。

1、壞字符規(guī)則

基本思路圖解:
首先:提供兩個字符串分別是文本串、模式串

因為是從右往左開始比較、為什么呢?因為這樣的話如果最后一個比較不上前面的一定就可以不用比較了。
這時:c、d不匹配。所以文本串中的d是壞字符。

這時利用公式計算出**后移位數(shù)。****

 后移位數(shù) = 壞字符的位置 - 模式串中的上一次出現(xiàn)位置

所以計算結(jié)果是:
6=5-(-1);
因為按數(shù)組下標計算,而且模式串中沒有該壞字符,所以是(-1)。


接下來繼續(xù)比較:
c、b不匹配,壞字符是b,發(fā)現(xiàn)模式串中有兩個壞字符。
這時選擇從右往左第一個出現(xiàn)的,因為如果選擇后面的話就容易會造成被有遺漏問題。
結(jié)果:
3=5-2,所以右移3位。

好后綴規(guī)則:

這里的文本串中的ab、c和模式串中的ab、c匹配的,所以ab,c就是好后綴。

在這里在第三個模式串中的a、b是不匹配的,如果使用壞字符方式進行移動的話:3-2=1;
那么有更好的移動方案嗎?
接下來是好后綴計算公式:

后移量=模式串好后綴位置- 模式串中上一次出現(xiàn)好后綴位置

舉個例子:“afasdsadas” 中假設(shè)好后綴是as,那么as位置按s位置來算(就是按后面字符來算),那么就是9,模式串中上一次出現(xiàn)好后綴位置就是3那么后移量就是 9-3=6;
再舉個例子:“ababababc” 中假設(shè)好后綴是 c,那么c的位置是8,模式串中上一次出現(xiàn)好后綴位置是沒有那么就是(-1),所以后移量就是8-(-1)=9;

特別注意:

 (1)"好后綴"的位置以最后一個字符為準。假定"ABCDEF"的"EF"是好后綴,則它的位置以"F"為準,即5(從0開始計算)。(2)如果"好后綴"在搜索詞中只出現(xiàn)一次,則它的上一次出現(xiàn)位置為 -1。比如,"EF"在"ABCDEF"之中只出現(xiàn)一次,則它的上一次出現(xiàn)位置為-1(即未出現(xiàn))。(3)如果"好后綴"有多個,則除了最長的那個"好后綴",其他"好后綴"的上一次出現(xiàn)位置必須在頭部。比如,假定"BABCDAB"的"好后綴"是"DAB"、"AB"、"B",請問這時"好后綴"的上一次出現(xiàn)位置是什么?回答是,此時采用的好后綴是"B",它的上一次出現(xiàn)位置是頭部,即第0位。這個規(guī)則也可以這樣表達:如果最長的那個"好后綴"只出現(xiàn)一次,則可以把搜索詞改寫成如下形式進行位置計算"(DA)BABCDAB",即虛擬加入最前面的"DA"。

**舉個例子:**模式串:“asjsjss”,假設(shè)里面好后綴有ss,s。那么這時選哪個好綴呢,選ss,因為s的上一次出現(xiàn)不是在字符串頭。
**在舉一個:**模式串:“sjsjss”,假設(shè)里面好后綴有ss,s。那么這時選哪個好綴呢,選s,因為s的上一次出現(xiàn)是在字符串頭。

**總結(jié):**后移量是在好后綴、壞字符中后移量中去最大值。

總結(jié)

以上是生活随笔為你收集整理的BM算法图解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。