㈠ 想知道bm是什麼意思呢
BM是一種匹配演算法。
BM演算法被認為是亞線性串匹配演算法,它在最壞情況下找到模式所有出現的時間復雜度為O(mn),在最好情況下執行匹配找到模式所有出現的時間復雜度為O(n/m)。
BM演算法主要思想描述如下:
模式字元串的匹配順序是從右向左。
1、首先將P和T對齊,即p和t對齊。
2、然後匹配從模式字元串P的最右端字元開始,即判斷p[m]和t[m]是否匹配。
如果匹配成功,則向左移動判斷p[m-1]和t[m-1]是否匹配,如此循環下去;如果匹配不成功,則進行字元串滑移。
BM演算法的原理:
不同於樸素模式(brute-force search)的逐個字元對比,Boyer-Moore充分使用預處理 P的信息來盡可能跳過更多的字元。通常,我們比較一個字元串都是從首字母開始,逐個比較下去。一旦發現有不同的字元,就需要從頭開始進行下一次比較。
這樣,就需要將字串中的所有字元一一比較。Boyer-Moore演算法的關鍵在於,當 P的最後一個字元被比較完成後,我們可以決定跳過一個或更多個字元。如果最後一個字元不匹配,那麼就沒必要繼續比較前一個字元。
如果最後一個字元未在 P中出現,那麼我們可以直接跳過 T的n個字元,比較接下來的n個字元,n為 P的長度(見定義)。
如果最後一個字元出現在 P中,那麼跳過的字元數需要進行計算(也就是將 P整體往後移),然後繼續前面的步驟來比較。通過這種字元的移動方式來代替逐個比較是這個演算法如此高效的關鍵所在。