字串匹配(中) BM演算法

2021-10-02 14:29:52 字數 1030 閱讀 2615

壞字串規則

問題:si - xi可能是負數,示例如下:0 - 3

解決方案:好字尾規則

好字尾規則

字首子串:類似字尾子串

規則選取 實現

//主串a, 模式串b

function

bm(a,b)

for(

let i=

0;i)let suffix =

let prefix =

generategs

(b, suffix, prefix)

let i =

0while

(i <= al-bl)

if(j <0)

return i

let x = j -

getxi

(a[i+j]

)let y =0if

(j < bl -1)

i += math.

max(x,y)

}return-1

function

getxi

(v)//j表示壞字串對應的模式串中字元下標

function

movebygs

(j)}

return bl }}

function

generategs

(b,suffix,prefix)

//遍歷b,取每項值b[j],與最後一項b[m-1]比較

for(

let i =

0; i < m-

1; i++)if

(j ==-1

) prefix[k]

=true

//字尾子串匹配到了字首子串}}

//測試bm(

'cabcabd'

,'cabd'

)//3bm(

'acabcbcbacabc'

,'cbacabc'

)//6bm(

'2111'

,'1111'

)//-1

字串匹配 BM演算法

bm演算法 1 三個shift函式 d1,d2,d3,函式的作用是決定當匹配不成功時視窗的移動位數。1 d1 字尾u在模式串p中的另乙個位置是最右出現位置是j 不包括在模式串尾的出現 文字串的視窗安全移動方法是將視窗移動m j字元,使文字中的u與模式串中最右邊的u的出現位置相對齊。對模式中的每個字尾...

BM演算法 字串匹配演算法

思想 使用啟發式規則,通過每次的失敗的匹配嘗試,演算法都能根據這些資訊來排除盡可能多的無法匹配的位置 為什麼說是每次呢,因為每次的情況可能不一樣,通過資訊來跳過啟發式規則的得到的步數 目的 利用啟發式規則,盡可能多跳過無法匹配的位置,從而達到更高的效率 方法 壞字元規則和好字尾規則,取其中移動步數較...

字串匹配演算法(2)BM

2017 02 24 本篇針對bm演算法 字串匹配 進行講解。這個演算法也是看了很久,看到這裡也感覺很力不從心,看來需要我把前面兩篇演算法實踐下了,不然總覺得空空的。概述 1 對於原有的都是從左往右進行匹配的模式進行修改,改為 從右往左 也就是先匹配最後面的字元。從這裡可以引出從右往左的bf演算法,...