1.簡介
bm演算法是比較優秀的字串匹配演算法.
2.主要思想介紹
bm演算法主要有三個要點
①.從pattern的後面往前比較
②.對匹配過的資料應用kmp
③.將pattern向右滑,找到與string當前字元匹配的a相同的字元位置(若不存在,直接滑過sizeof(length))
(第三步目前只實現了滑過在右側以匹配過字元不存在的情況)
3.**
1 #include 2view codeusing
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
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...