bm演算法
1、三個shift函式:d1,d2,d3,函式的作用是決定當匹配不成功時視窗的移動位數。
1)d1:字尾u在模式串p中的另乙個位置是最右出現位置是j(不包括在模式串尾的出現),文字串的視窗安全移動方法是將視窗移動m-j字元,使文字中的u與模式串中最右邊的u的出現位置相對齊。對模式中的每個字尾,計算它到它的下乙個出現之間的距離,即shift的d1,如果p的字尾u不在p中重複出現,則d1(u)被置為模式串長度m
2)d2:字尾u不出現在p中的任何其他位置。但u的字尾v可能是模式串p的乙個字首,需要對模式串所有的字尾計算第二個函式d2。對於p的每個字尾u,d2(u)表示既是p的字首,同時也是u的字尾的最長字串v的長度.
3)d3:在搜尋視窗中從後向前搜尋時,在文字字元σ處不能成功匹配。保證下一次驗證時文字字元σ一定與模式串中的乙個字元σ相對應(即:使上次匹配不成功的那個字元能在模式串的第二個x部分匹配成功,在模式串中找到這個字元,該字元是x的前面乙個字元),對每個字母表中的每個字元σ,d3(σ)表示σ在模式串的最右出現位置到模式串末尾的距離,如果σ不在p中,d3為m
4、讀入文字字串u並在字元σ上不匹配時,進行如下幾次比較:
1) 第一次:取d1(u)和d3(σ)中較大值。
2)第二次:以上面的比較結果與m-d2(u)中的較小者,因為後者是最大的安全移動距離。
5、如果抵達了視窗的起始位置,說明發現階段乙個成功匹配,用d2計算視窗的下一次移動距離,進行繼續匹配。
BM演算法 字串匹配演算法
思想 使用啟發式規則,通過每次的失敗的匹配嘗試,演算法都能根據這些資訊來排除盡可能多的無法匹配的位置 為什麼說是每次呢,因為每次的情況可能不一樣,通過資訊來跳過啟發式規則的得到的步數 目的 利用啟發式規則,盡可能多跳過無法匹配的位置,從而達到更高的效率 方法 壞字元規則和好字尾規則,取其中移動步數較...
字串匹配(中) BM演算法
壞字串規則 問題 si xi可能是負數,示例如下 0 3 解決方案 好字尾規則 好字尾規則 字首子串 類似字尾子串 規則選取 實現 主串a,模式串b function bm a,b for let i 0 i let suffix let prefix generategs b,suffix,pre...
字串匹配演算法(2)BM
2017 02 24 本篇針對bm演算法 字串匹配 進行講解。這個演算法也是看了很久,看到這裡也感覺很力不從心,看來需要我把前面兩篇演算法實踐下了,不然總覺得空空的。概述 1 對於原有的都是從左往右進行匹配的模式進行修改,改為 從右往左 也就是先匹配最後面的字元。從這裡可以引出從右往左的bf演算法,...