小明學演算法 7 字串匹配演算法 BM

2022-05-16 14:45:46 字數 1240 閱讀 8376

1.簡介

bm演算法是比較優秀的字串匹配演算法.

2.主要思想介紹

bm演算法主要有三個要點

①.從pattern的後面往前比較

②.對匹配過的資料應用kmp

③.將pattern向右滑,找到與string當前字元匹配的a相同的字元位置(若不存在,直接滑過sizeof(length))

(第三步目前只實現了滑過在右側以匹配過字元不存在的情況)

3.**

1 #include 2

using

namespace

std;

3bool issub(char* a, char* b, int lengtha, int

lengthb);

4void print(int* table, int

length);5//

記錄字元在pattern中的最後位置

6int* prebmlocation(char* pattern, int

length)717

18//

和kmp一樣的從後往前比對思路

19void prebmtable(char* pattern, int *table, int

length)

2037

else

3842}43

}44}45

46//

b是否是a的尾子串(從末尾一位開始比較)

47bool issub(char* a, char* b, int lengtha, int

lengthb)

4855

56return

true;57

}5859void print(int* table, int

length)

6065 cout <

67int max(int a, int

b)68

7172

void bm(char* string, int m, char* pattern, int

n)73

101102

if (j == 0

)103

108}

109}

110111

112}

113114

void

main()

115

view code

BM演算法 字串匹配演算法

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

字串匹配 BM演算法

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

字串匹配(中) BM演算法

壞字串規則 問題 si xi可能是負數,示例如下 0 3 解決方案 好字尾規則 好字尾規則 字首子串 類似字尾子串 規則選取 實現 主串a,模式串b function bm a,b for let i 0 i let suffix let prefix generategs b,suffix,pre...