bm演算法,可以求乙個數列的最短遞推式。
採用增量法,依次考慮每個數:
若在這個位置上正確,則忽略;
否則,類似拉格朗日插值法,找乙個滿足在前面位置都為0,這個位置上不為0的遞推式,進行修補。
每當我們遇到乙個這樣的位置時,我們都可以得到乙個這樣的遞推式:用目前的遞推式,在0位置(即這個位置上),增加乙個-1。相當於積累了乙個「經驗」。
這樣,我們在所有的「經驗」中,找到乙個,並在它的前面補0,相當於移位。
若有多個,取補0後長度最小的。
時間複雜度:\(o(n(n+m))\)。(n為遞推式長度,m為輸入長度)。
**:
int bm(int sz[10010],int n)
return m;
}
演算法 BM演算法
如果要判定長度為n nn兩個字串相等,比較中要進行n nn比較,但是如果要判定兩個字串不相等,只需要找出乙個不相等的位置,因此可以得到如下結論 結論1 判定字串相等和判定字串不相等的代價不同,判定不相等的代價更小 在kmp演算法中,每發生一次失配時,演算法總是嘗試根據已經獲得的匹配成功的資訊來確定乙...
BM演算法詳解
bm演算法 字尾匹配,是指模式串的比較從右到左,模式串的移動也是從左到右的匹配過程,經典的bm演算法其實是對字尾蠻力匹配演算法的改進。為了實現更快移動模式串,bm演算法定義了兩個規則,好字尾規則和壞字元規則,如下圖可以清晰的看出他們的含義。利用好字尾和壞字元可以大大加快模式串的移動距離,不是簡單的 ...
BM演算法(筆記)
利用多位移動減少不必要的匹配。兩條字串 主串,匹配串 主串不動,匹配串去匹配 以下是匹配串針對主串而言 初始位置 最左對齊 匹配方向 從右向左 即初始位置對齊後,從匹配串最後乙個字元開始匹配 移動方向 從左向右 從右向左匹配時,出現不匹配的字元稱為 壞字元 壞字元有兩種情形,分別是 匹配串存在該壞字...