字串搜尋演算法 一 Boyer Moore演算法

2021-07-10 23:05:14 字數 1310 閱讀 9255

boyer-moore字串搜尋演算法是一種非常高效的字串搜尋演算法。它由bob boyer和j strother moore設計於2023年。此演算法僅對搜尋目標字串(關鍵字)進行預處理,而非被搜尋的字串。不同於樸素模式(brute-force search)的逐個字元對比,它不需要對被搜尋的字串中的字元進行逐一比較,而會跳過其中某些部分。

這裡使用圖說明下,bm演算法是怎麼跳過某些字元的。假設我們要在text表示的字串中搜尋pattern表示的字串。這裡使用了原**的乙個字串例子。

bm演算法首先需要text串與pattern串左側對齊,然後是從pattern的最右側的字元開始,指標是從右向左移動,依次與text串中字元匹配。

如圖左對齊後,首先t與f比較,f與t不匹配,同時觀察發現,f不在pattern中,所以可以直接把pattern向後移動到f的後乙個字元,並與之對齊。如下圖:

移動之後,發現上圖中-與f也不匹配,但是發現-存在於pattern串中。所以直接向後移動到兩個字串的-對齊的位置,如下圖:

這個時候紅框中的字元匹配,指標左移動。

這種情況與第一種情況一樣,l不存在於pattern串中,所以pattern可以直接跳到text串的l字元後邊。

此時,依次向左匹配,匹配成功。

boyer, robert s.; moore, j strother (october 1977). "a fast string searching algorithm" . communications of the acm

字串搜尋演算法

參考文獻 google boyer moore 1.前言 字串搜尋是乙個基本的操作,c庫函式中也提供了strstr 函式進行字串搜尋,應該是屬於線性搜尋。此外,為提高搜尋速度,人們又發展 出一些快速搜尋演算法,如boyer moore演算法等,其與線性搜尋的區別是當發現模式不匹配時,不是象線性搜尋那...

字串搜尋演算法總結

因為在網上搜尋hash演算法的知識,無意中又找到一些字串搜尋演算法。由於之前已經學習過一些搜尋演算法,覺得應該可以歸為一類。因此就寫一篇文章來記錄下學習的過程。問題 在一長字串中找出其是否包含某子字串。首先當然還是簡單演算法,通過遍歷來檢索所有的可能 public static int search...

字串匹配 暴力搜尋演算法

主要特徵 1 沒有預處理階段 2 需要常量額外空間 3 通常需要模式串視窗向右移動乙個位置 4 可以按照任意順序進行比較 5 搜尋的時間複雜度為 o mn 6 文字字元期望比較次數 2n演算法描述 暴力搜尋演算法由文字串中從0到 n m所有位置的比較組成,無論是否從模式串的起始位置開始,每次匹配過後...